Hallo,
beim Erstellen eines Bildes erhalte ich folgende Fehlermeldung:
Der entsprechende Code-Schnipsel dazu:
(wichtig: Die Bilder sind alle quadratisch!)
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
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
(wichtig: Die Bilder sind alle quadratisch!)
PHP Code:
// 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);
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
Comment