[php] png slechts gedeeltelijk getekend

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Onderstaande code levert een plaatje op van 64x64 pixels, waarvan de eerste 4 rijen gevuld worden met een random kleur. Terwijl $y toch echt telt van 0 tot 63, en ik dus zou verwachten dat het *hele* plaatje gevuld zou moeten worden (wat ook de bedoeling is).

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
$im = imagecreate(64, 64);

for ($y=0; $y<=63; $y++):
    for ($x=0; $x<=63; $x++):
        
        $r = rand (0, 255);
        $g = rand (0, 255);
        $b = rand (0, 255);
        
        imagesetpixel($im,$x,$y, imagecolorallocate($im, $r,$g,$b));
        
    endfor;
endfor;

ob_start();
imagepng($im);
$s = ob_get_contents();
ob_end_clean();
header('Content-type: image/png');
print $s;
?>

In de uiteindelijke code wordt het plaatje gevuld met kleuren die uit een database komen, maar ik heb even voor random kleuren gekozen om een compact stuk code te posten hier. 'Hij' leest namelijk wel alles goed uit de database, en het effect is hetzelfde (slechts de eerste 4 rijen worden gevuld).

Het lijkt wel alsof 'Hij' na 256 pixels vullen geen zin meer heeft.
'Hij' is overigens de ingebouwde apache van MacOS X met PHP 4.3.6 van entropy release 4.

Iemand een idee?

Acties:
  • 0 Henk 'm!

  • NMe
  • Registratie: Februari 2004
  • Laatst online: 09-09 13:58

NMe

Quia Ego Sic Dico.

Volgens mij ben je een 8-bits png aan het bouwen, en zijn je kleuren na 256 pixels gewoon op. Ik heb geen idee in hoeverre dit klopt, maar dat is vast wel terug te vinden in de documentatie van imagepng. Kijk eens of je hetzelfde probleem met jpegs ook hebt?

'E's fighting in there!' he stuttered, grabbing the captain's arm.
'All by himself?' said the captain.
'No, with everyone!' shouted Nobby, hopping from one foot to the other.


Acties:
  • 0 Henk 'm!

  • Icelus
  • Registratie: Januari 2004
  • Niet online
Dit is inderdaad een 8-bits png.
Om een "true-color" png te maken dien je imagecreatetruecolor te gebruiken.

http://www.php.net/manual....imagecreatetruecolor.php

Developer Accused Of Unreadable Code Refuses To Comment


Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Helaas, imagejpeg doet exact hetzelfde.
Ook imagecreatetruecolor() biedt geen soelaas.
Ik heb overigens aan een 8 bit plaatje in de uiteindelijke versie ruim voldoende.

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ach! maar imagecreatetruecolor is inderdaad wel de oplossing!
(Ik had daar gisteren al mee gespeeld, en toen zag ik geen verschil)
Al snap ik niet waarom, maar dat boeit niet.

bedankt, ik kan weer verder! :)

[ Voor 20% gewijzigd door Verwijderd op 20-07-2004 14:00 ]


Acties:
  • 0 Henk 'm!

Verwijderd

Verwijderd schreef op 20 juli 2004 @ 13:57:
Helaas, imagejpeg doet exact hetzelfde.
Ook imagecreatetruecolor() biedt geen soelaas.
Ik heb overigens aan een 8 bit plaatje in de uiteindelijke versie ruim voldoende.
Uhh, niet als je voor elke pixel een nieuwe kleur in het palet aan gaat maken (met imagecolorallocate dus).

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Uhh, niet als je voor elke pixel een nieuwe kleur in het palet aan gaat maken (met imagecolorallocate dus).
Dan ga ik me nu eerst eens inlezen in paletten en dergelijke. Daar ga ik met de php-manual ongetwijfeld uitkomen. Vooralsnog heb ik eerst het plaatje dat ik wil zien, en daar ging het me in eerste instantie om.

dank!
Pagina: 1