Transparenz bei dynamischer Bilderstellung - GIF
Gero
- php
Hallo,
ich habe verschiedene GIF Bilder die ich per PHP lade, verkleinere und übereinanderlege (Zumindest ist das mein Ziel)
Das Laden,Verkleinern und übereinanderlegen passt soweit, nur habe ich ein Problem mit der Transparenz. Ich habe jetzt durch ein bisschen Googlen verschiedene Lösungsansätze probiert aber stoße immer wieder auf das gleiche Problem. Der Hintergrund ist entweder schwarz oder das Bild wird fehlerhaft dargestellt, wenn ich ich die Transparente Farbe ermitteln lasse. Das liegt sicherlich an dem Umstand, das innerhalb des Bildes auch mal schwarz als Farbe vorkommen kann. Hier mal ein Auszug aus meinem Script. Das ist die letzte Version. Versuche ohne den $transcol-Kram haben letztendlich das gleiche Problem verursacht. Vielleicht hat jemand von euch eine Idee was ich falsch mache.
// Bilder einfügen
//Wallpaper
imagecopy($img, $im3, 0, 0, 0, 0, 1024, 768);
//Hintergrund verkleinern und ausgeben
$im1 = ImageCreateTrueColor(22, 22);
$Originalgrafik = ImageCreateFromGIF($bg);
$transcol=imagecolortransparent($bg);
ImageCopyResampled($im1, $Originalgrafik, 0, 0, 0, 0, 22, 22, 51, 51);
imagecolortransparent($im1,$transcol);//FUNKTIONIERT NICHT WIRKLICH
imagecopy($img, $im1, 230, 505, 0, 0, 22, 22);
//Vordergrund verkleinern und ausgeben
$im2 = ImageCreateTrueColor(22, 22);
$Originalgrafik1 = ImageCreateFromGIF($fg);
$transcol1=imagecolortransparent($Originalgrafik1);
imagepalettecopy($im2,$Originalgrafik1);
imagefill($im2,0,0,$transcol);
ImageCopyResampled($im2, $Originalgrafik1, 0, 0, 0, 0, 22, 22, 51, 51);
imagecolortransparent($im2,$transcol1);//FUNKTIONIERT NICHT WIRKLICH
imagecopy($img, $im2, 230, 505, 0, 0, 22, 22);
Das Problem liegt irgendwie an dem Wallpaper welches noch dahinter soll ODER an es liegt an der Verkleinerung. Denn folgender Code funktioniert einwandfrei.
// Bild Infos
$width = imagesx($im1); // Höhe Hintergrund
$height = imagesy($im1); // Breite Hintergrund
$x = imagesx($im2); // Höhe Vordergrund
$y = imagesy($im2); // Breite Vordergrund
// Bilder erzeugen
$img = imagecreatetruecolor($width, $height);
//Transparenz erzeugen
$farbe_b = imagecolorallocate ( $image, 0, 0, 0 );
imagecolortransparent ( $im1, $farbe_b );
// Bilder einfügen
imagecopy($img, $im1, 0, 0, 0, 0, $x, $y);
imagecopy($img, $im2, 0, 0, 0, 0, $x, $y);
Die Bilder konstruiere ich so: $im1 = ImageCreateFromGIF($bg);
Wie schon gesagt, entweder habe ich einen schwarzen Rand, bzw. Hintergrund oder es fehlen eben gleich alle schwarzen Bestandteile des Bildes.
Vielen vielen Dank
Hi,
imagecolortransparent($im1,$transcol);//FUNKTIONIERT NICHT WIRKLICH
imagecopy($img, $im1, 230, 505, 0, 0, 22, 22);
Was hat uns denn das [Manual zu imagecolortransparent](http://www.php.net/manual/en/function.imagecolortransparent.php) mitzuteilen?
U.a. das:
> Note: Transparency is copied only with imagecopymerge() and true color images, not with imagecopy() or pallete images.
MfG ChrisB
--
Light travels faster than sound - that's why most people appear bright until you hear them speak.
Hallo
irgendwie verstehe ich das falsch. Jetzt ist das gesamte Bild transparent. Also inklusive dem schwarzen Rand. Wenn ich den letzten parameter auf Null stelle dann ist sogar alles weg :) Was mache ich falsch?
Vielen Dank
Hi,
Was hat uns denn das Manual zu imagecolortransparent mitzuteilen?
U.a. das:
»» Note: Transparency is copied only with imagecopymerge() and true color images, not with imagecopy() or pallete images.MfG ChrisB