Jedoch wird bei transparenten Bildern das Transparente
schwarz.
Wie kann ich das verhindern?
Indem du zuerst die Farbe ermittelst, die transparent sein soll:
$transparent_color=imagecolorat ($image, 1, 1 );
(ausgehend davon, dass an den Koordinaten x=1 und y=1 auch die entspr. Farbe vorhanden ist, was bei deinem Beispiel ja der Fall ist)
Naja, dann solltest du wissen, auf welcher Koordinate diese Farbe ist oder du weißt von vorne herein, welche Farbe transparent sein soll.
Von irgendwoher muss diese Information ja kommen.
Sicherlich lassen sich die Daten der bestehenden Farbtransparenz auch aus der Bild-Datei auszulesen. Keine Ahnung, wo das da steht aber das kann man sicher googeln. Dürfte aber u.U. nicht einfach werden.
Sorry, aber eine andere Möglichkeit kenne ich nicht.
ich würde gerne ein kleines Script schreiben, welches
PNG-Bilder verkleinert.
Jedoch wird bei transparenten Bildern das Transparente
schwarz.
deine quelle hat einen alphakanal.
du musst dein neues bild erst mit einem transparenten hintergrund fuellen. ein leeres bild wird schwarz dargestellt. ein transparenter hintergrund eben transparent.
die transparenten bereiche aus dem kopierten bild können das schwarz des hintergrundes nicht abdecken - sie sind ja transparent. nur der rote kreis kann das schwarz abdecken.
<?php $src = imagecreatefrompng('png-transparent.png');<br />$dst = imagecreatetruecolor(100,100);
//sage dem bild, dass es mit alpha kanal arbeiten soll
imagesavealpha($dst,true);
//fuelle den hintergrund mit voll transparentem schwarz
imagefill( $dst, 0, 0, imagecolorallocatealpha( $dst, 0, 0, 0, 127 ) );
imagecopyresampled($dst,$src,0,0,0,0,100,100,200,200);
if (!headers\_sent()) {
header("Content-type: image/png");
imagepng($dst);
}