Gero: Transparenz bei dynamischer Bilderstellung - GIF

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

  1. 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.
    
    1. 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