2012-04-14 5 views
1

Ich habe ein Array von Pixeldaten in einem JSON-Objekt. Ich versuche, PHP zu verwenden, um die Pixeldaten zu einem GD-Bild neu zu zeichnen.PHP GD Zeichnung Pixeldaten von Array stoppt Mitte Schleife

Ich bin so etwas wie die folgenden mit (Hinweis zu Testzwecken habe ich den Index für die Schleife bei 5000, etwa auf halbem Weg in das Array gestartet.)

$im = imagecreate($w,$h); 
$i=5000; 
while($i < count($pixels)){ 
    $item = $data[$i]; 
    $rgb = $item['rgb']; 
    $pos = $item['pos']; 
    $col = imagecolorallocate($im, $rgb[0],$rgb[1],$rgb[2]); 
    imagesetpixel($im , $pos[0], $pos[1], $col); 
    $i++; 
} 
header("Content-Type: image/png"); 
imagepng($im); 

Es ist mein Skript scheint nur Es wird so weit unten im Array gemacht, bevor es ausschneidet und das Bild fehlerfrei ausgibt.

Unten ist die Ausgabe, wenn ich den Array-Index über die Hälfte der Länge des Arrays starten. Ich bekomme einen sehr kleinen Teil des Bildes.

enter image description here

Ist das in dem Speicher durch? Oder eine Auszeit? Die Seite dauert nicht lange zu laden oder irgendetwas ...

+0

Was passiert, wenn Sie 'error_reporting (E_ALL);' hinzufügen, aktivieren Sie die Fehlermeldung mit 'ini_set ('display_errors', true)' – KillerX

+0

Sie scheinen bis zur Länge des $ pixels array zu loopen, aber Ihre Daten bekommen aus dem $ Daten-Array. Das erste, was ich suchen würde, ist die Länge dieser beiden Arrays. Allgemein gesagt, wenn ich solche Dinge debugge, kommentiere ich die Header- und Imagepng-Zeilen aus. Dann kann out Debugging-Nachrichten in der Schleife ausgeben, um genau zu sehen, was vor sich geht. –

+0

Ok, für alle anderen mit diesem Problem. Hier ist die Lösung. Verwenden Sie imagecreatetruecolor anstelle von imagecreate. Es scheint, dass 'imagecolorallocate' bei der Verwendung von' imagecreate' nur bis zu 255 Farben zuweisen kann. Während "imagecreatetruecolor" keine solche Beschränkung hat. – ndmweb

Antwort

3

Ok, für alle anderen mit diesem Problem. Hier ist die Lösung. Verwenden Sie imagecreatetruecolor anstelle von imagecreate. Es scheint, dass imagecolorallocate nur bis zu 255 Farben zuordnen kann, wenn Sie imagecreate verwenden. Während imagecreatetruecolor keine solche Beschränkung hat.

+1

Danke Mann, verloren wie 2 Stunden auf diesem :) –