Hi,
$this->image_handler = imagecreatefrompng($this->image_path);
imagealphablending($this->image_handler,false);
imagesavealpha($this->image_handler,true);
...zeugs zum resizen...
imageinterlace($this->image_handler);
return(imagepng($this->image_handler,$destination,$quality));
der entscheidende Abschnitt stand hier gar nicht drin: das neu erstellte kleinere Bild beim Resizen muss erstens ebenfalls mit imagealphablending() und imagesavealpha() behandelt werden und zweitens muss es mit einer einheitlichen Hintergrundfarbe gefüllt werden, die dann per imagecolortransparent() komplett durchscheinend gemacht wird. Dann kopiert man per imagecopyresampled() das große Bild in das kleine rein. Mein primärer Fehler war also, dass ich vergessen hatte, die Hintergrundfarbe vom kleinen neu erstellen Bild als transparent zu markieren - ich dachte die Transparenz vom Großen wird mit drüber kopiert. Mein Code sieht jetzt so aus: (gekürzt)
~~~php
> $this->image_handler = imagecreatefrompng($this->image_path);
> imagealphablending($this->image_handler,false);
> imagesavealpha($this->image_handler,true);
$image_handler = imagecreatetruecolor($width,$height);
imagealphablending($image_handler,false);
imagesavealpha($image_handler,true);
imagepalettecopy($image_handler,$this->image_handler);
$transparent = imagecolorallocate($image_handler,0,0,0);
imagefill($image_handler,0,0,$transparent);
imagecolortransparent($image_handler,$transparent);
imagecopyresampled
(
$image_handler ,
$this->image_handler,
0,0,0,0 ,
$width ,
$height ,
$this->image_width ,
$this->image_height
);
$this->image_handler = $image_handler;
> imageinterlace($this->image_handler);
> return(imagepng($this->image_handler,$destination,$quality));
Schöne Grüße
Julian