Bene: transparente Thumbnails erzeugen mit gd Bibliothek

Beitrag lesen

Hallo,

ich versuche grad mit mehr oder weniger Erfolg eine Funktion zum Erzeugen von Thumbnail-Bilder zum Laufen zu bringen.
Es funktioniert alles mittlerweile recht gut, allerdings habe ich ein Problem bei transparten gifs und pngs.
Ich habe zu diesem Thema etliche Einträge im Internet und auch im Forumsarchiv gefunden, habe allerdings noch kein zufriedenstellendes Ergebnis erreicht.
Insbesondere folgender Foreneintrag hat mir ein Stück weitergeholfen (http://forum.de.selfhtml.org/archiv/2005/2/t101578/#m624114).
Allerdings funktioniert es nur mit imagecopyresized. Ich würde allerdings wegen der besseren Qualität sehr gerne imagecopyresampled verweden. Dies führt aber einer recht schlechten Qualität Bild (bei Verwendung von imagecreate) oder zu starken Störungen (bei Verwendung von imagecreatetruecolor).

Nachfolgend noch der Quelltext.
Habt ihr noch Ideen wie ich das Problem lösen könnte?
Bin für alle Tips dankbar!

Viele Grüße
Bene

  
private function saveThumbnail()  
 {  
  switch ($this->content_type)  
  {  
       case "image/jpeg":  
        $source = imagecreatefromjpeg($this->path.$this->filename);  
        break;  
       case "image/png":  
        $source = imagecreatefrompng($this->path.$this->filename);  
        break;  
       case "image/gif":  
        $source = imagecreatefromgif($this->path.$this->filename);  
        break;  
     }  
  
     if( ($this->width < $this->thumb_width) && ($this->height < $this->thumb_height) )  
     {  
      $this->thumb_width = $this->width;  
      $this->thumb_height = $this->height;  
     }  
     else  
     {  
      if($this->width >= $this->height)  
      {  
       $rate = $this->width / 100;  
      }  
      else  
      {  
       $rate = $this->height / 100;  
      }  
  
      $this->thumb_width = $this->width / $rate;  
      $this->thumb_height = $this->height / $rate;  
     }  
  
     $colorTransparent = imagecolortransparent($source);  
  $thumb = imagecreate($this->thumb_width, $this->thumb_height);  
  imagepalettecopy($thumb, $source);  
  imagefill($thumb, 0, 0, $colorTransparent);  
  imagecolortransparent($thumb, $colorTransparent);  
  
     imagecopyresampled($thumb, $source, 0, 0, 0, 0, $this->thumb_width, $this->thumb_height, $this->width, $this->height);  
  
     $filename_thumb = $this->path."thumbs/".$this->filename;  
     switch ($this->content_type)  
     {  
      case "image/jpeg":  
       imagejpeg($thumb, $filename_thumb);  
       break;  
   case "image/png":  
        imagepng($thumb, $filename_thumb);  
        break;  
   case "image/gif":  
        imagegif($thumb, $filename_thumb);  
        break;  
  }  
 }