Imagecopyresized transparentes png

Hallo,

ich würde gerne ein kleines Script schreiben, welches PNG-Bilder verkleinert.

Jedoch wird bei transparenten Bildern das Transparente schwarz.

Wie kann ich das verhindern?

Beispiel:
Originalbild (nicht von mir): http://quhno.internetstrahlen.de/PNGAlpha/bilder/png…

Mit Script: http://david97.kilu.de/php/pixel/kleiner.php?groesse…

Hallo,

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)

Dann setzt du diese Farbe transparent:

imagecolortransparent ( $image, $transparent_color );

Hilft das weiter?

Gruß, Robi

Was ist, wenn dies nicht der Fall ist?

Was ist, wenn dies nicht 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.

Hallo,

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.

sieht man auch schoen in der user note zu http://de.php.net/imagesavealpha

Wie kann ich das verhindern?

<?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);
}