Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
gd-png: fatal libpng error: Invalid number of colors in palettel [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
ebiz-webhosting
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
gd-png: fatal libpng error: Invalid number of colors in palettel


 
roobin
14-03-2004, 13:21 
 
Hallo,

beim Erstellen eines Bildes erhalte ich folgende Fehlermeldung:
Fatal error: imagepng(): gd-png: fatal libpng error: Invalid number of colors in palette in /xxx/mathe/transformation.php on line 235

Der entsprechende Code-Schnipsel dazu:
(wichtig: Die Bilder sind alle quadratisch!)
// Um mit dem Ursprungsbild arbeiten zu können, braucht man eine PHP-"Kopie"
$altes_bild = ImageCreateFromPng("bilder/" . $ausgangs_datei);
// Die Dimensionen des alten Bildes werden ausgelesen...
$groesse = ImageSX($altes_bild);
// Das alte temporäre Bild kann nun gelöscht werden.
@unLink("bilder/tmp." . $bild . "." . $id . ".png");
// Ein temporäres Bild erzeugen, in das die neuen Bildpunkt eingetragen werden
$neues_bild = ImageCreate($groesse, $groesse);
// Um die gleichen Farben auch im neuen Bild verfügbar zu haben, muss
// die entsprechende Farbpalette vom einen Bild ins andere kopiert werden
imagePaletteCopy($neues_bild, $altes_bild);

// Für jeden einzelnen Bildpunkt wird jetzt die Transformation ausgeführt
for ( $x=1; $x<=$groesse; $x++ )
{
for ( $y=1; $y<=$groesse; $y++ )
{
// Farbwert der Koordinaten $x und $y zurückgeben
$farbe = imageColorAt($altes_bild, $x, $y);

// Jetzt muss noch unterschieden werden, ob eine anfängliche
// Transformation rückgängig gemacht werden oder wirklich
// transformiert werden soll.
if ( $_REQUEST["mode"] == "minus" )
{
// Arnold-Transformation einmal rückgängig
$neu_x = fmod((2*$x - $y), $groesse);
$neu_y = fmod(($y - $x), $groesse);
}
else
{
// Arnold-Transformation einmal ausführen
$neu_x = ($x + $y) % $groesse;
$neu_y = ($x + 2*$y) % $groesse;
}

// Mit der oben bestimmten Farbe des Punktes wird nun bei diesen neuen
// Koordinaten ein Bildpunkt gezeichnet
imageSetPixel($neues_bild, $neu_x, $neu_y, $farbe);
}
}

// Das Bild wird gespeichert.
imagePng($neues_bild, "bilder/tmp." . $bild . "." . $id . ".png", 100); // LINIE 235
// Bild zerstören, mit dem gearbeitet wurde
imageDestroy($neues_bild);

Wundert euch nicht über die dumpen Kommentare - wurde dazu verdonnert, soviel zu kommentieren...

Im Forum wurde gesucht, ebenso in Google. Google lieferte zwar einige Ergebnisse, das Problem wurde aber nie richtig gelöst...

Bin für jede Hilfe dankbar!

MfG, rob

 
Wurzel
14-03-2004, 13:31 
 
entweder versuchst du es mit imagecreatetruecolor() oder du liest zuerst
die farbpalette des source-bildes aus und weist diese der palette des
zielbildes zu, sofern die identisch sein soll/muss.

 
roobin
14-03-2004, 14:20 
 
Danke für die Antwort.
Ja, die Farbpalette ist absolut identisch, da jeder Pixel des alten Bildes einfach unter veränderten Koordinaten auf das neue Bild übertragen wird.

 
roobin
14-03-2004, 14:49 
 
oder du liest zuerst
die farbpalette des source-bildes aus und weist diese der palette des
zielbildes zu, sofern die identisch sein soll/muss.

mache ich das denn nicht mit imagePaletteCopy() ? :confused:

 
Wurzel
14-03-2004, 14:58 
 
laut manual: ja .... check mal mit imagecolorsforindex() ob das wirklich so ist ... uU steckt der fehler ja woanders.

 
roobin
14-03-2004, 18:04 
 
naja, soll mir egal sein :)
Mit Deinem Tipp, dass ich imageCreateTrueColor() verwenden soll, klappt's (liegt wohl daran, dass imageCreateFromPng() auch ein TrueColor-Bild zurückliefert).

Nur noch eine kurze andere Frage:
Ich benutze PHP 4.3.4 und da sollte doch die GDLib > 2.0 bereits installiert sein, oder? Oder muss ich die noch irgendwo aktivieren? (wenn ich in php.ini dieses Modul aktiviere, heisst es, sie kann nicht geladen werden ...)

edit:
... hat sich erledigt, danke für Deine Hilfe!

 
Wurzel
14-03-2004, 18:06 
 
wenn du keine gd2 hast, muss sie afaik einkompiliert werden (mal im forum installation suchen) ... was sagt denn die phpinfo() ?

- -

Alle Zeitangaben in WEZ +2. Es ist jetzt 09:57 Uhr.