[PHP] PNG Alpha Transparenz

Mowee

Well-known member
ID: 266520
L
22 Dezember 2006
795
102
Folgendes: Ich will ein Thumbnail von einem PNG-Bild erstellen. Ein Teil des Bildes ist Alpha Transparent. Jetzt soll dies auch so bleiben auch wenn ich das Thumbnail erstellt habe. Sonst wird ja leider der Transparente Bereich Schwarz. Es funktioniert wunderbar wenn ich die Größe nicht verändere. Sobald ich dies aber mache funktioniert das ganze leider nicht mehr. Hat einer eine Lösung dafür wie ich es trotzdem hinbekommen kann?

PHP:
$oldIm = ImageCreateFromPNG($image);
imageAlphaBlending($oldIm, true);
imageSaveAlpha($oldIm, true);

$im = ImageCreateTrueColor($newWidth,$newHeight);

$result = imagecopyresampled($im,$oldIm,0,0,0,0,$newWidth,$newHeight,$width,$height);

imageAlphaBlending($im, true);
imageSaveAlpha($im, true);

ImagePNG($im, "./temp/" . $image);
 
Welche GD lib ist drauf?
Versuch doch mal, Imagecreatetruecolor durch Imagecreate zu ersetzen ;)
Das hat bei mir schon manch Probleme gelöst und beim Test vorhin konnte ich die Bildgrößen von PNGs ändern ohne das die Transparenz flöten geht
 
Danke, dass funktioniert schonmal. nur leider sieht die grafik dann so aus:

bild78e3b.png


Aber das ist wenigstens dann schonmal ein Ansatz das ich mal schauen kann in der Doku wo denn da der große Unterschied ist.

EDIT: Vielleicht liegt das Problem darin:

imagecreatetruecolor() returns an image identifier representing a black image of the specified size.

Vielleicht funktioniert die Alpha Transparenz ja einfach zu gut :)

EDIT²: ha, das ist es. Die Transparenz funktioniert nur der Hintergrund ist es leider nicht.

PHP:
$color = ImageColorAllocate ($im, 255, 255, 255);
imagefill($im, 0, 0, $color);

Das bewirkt Wunder :) Jetzt nur noch herausfinden wie ich aus dem Schwarz ein Transparent mache :)
 
Zuletzt bearbeitet:
So, ich habe jetzt die Lösung. Das Geheimnis war es wirklich nur den Hintergrund auch Transparent zu machen denn dieser ist Standardmäßig Schwarz und nicht Transparent. Durch deinen Hinweis hast du mich auf den richtigen Weg gebracht. Die Lösung sieht jetzt so aus:
PHP:
$oldIm = ImageCreateFromPNG($image);

$im = ImageCreateTrueColor($newWidth,$newHeight);
$color = imagecolorallocatealpha($im, 0, 0, 0, 127);
imagefill($im, 0, 0, $color);

$result = imagecopyresampled($im,$oldIm,0,0,0,0,$newWidth,$newHeight,$width,$height);

imageSaveAlpha($im, true);
		
ImagePNG($im, "./temp/" . $image);