transparente Thumbnails erzeugen mit gd Bibliothek
Bene
- php
0 Julian von Mendel0 Bene
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;
}
}
Hi,
du brauchst aufjedenfall imagecreatetruecolor(). Bei mir funktionierte dieser Code. Bei dir fehlt auch imagealphablending() und imagesavealpha(), in wie weit das dein Problem verursachen kann weiß ich nicht.
Schöne Grüße
Julian
Hallo Julian,
vielen Dank für deine Antwort!
Ich bin in der Frage noch nicht weitergekommen.
Eine Frage zu deinem Code-Beispiel:
Dieser funktioniert ja nur mit pngs, oder?
Ich habe nur Probleme mit transparten gifs.
Viele Grüße
Bene
Hi,
Eine Frage zu deinem Code-Beispiel:
Dieser funktioniert ja nur mit pngs, oder?
Ich habe nur Probleme mit transparten gifs.
hast du mit png's auch getestet (und bei denen geht's)? An sich sollte das keinen Unterschied machen.
Schöne Grüße
Julian
Hallo,
ja bei pngs funktioniert es einwandfrei. Nur die gifs machen Probleme.
Ich weiß halt nicht genau wie die ganzen Funktionen die ich in den anderen Beispielen gesehen habe arbeiten und wie sie zusammespielen.
Verwende ich bei den gifs imagecopyresampled, so habe ich merkwürdige Störungen im thumbnail.
Ich glaube ich werde jetzt einfach die Bilder weiß einfärben. Ist zwar in dem fall nicht die beste Lösung, aber auch ok.
Danke für die Hilfe.
viele grüße
Bene
Hi,
ja bei pngs funktioniert es einwandfrei. Nur die gifs machen Probleme.
Ich weiß halt nicht genau wie die ganzen Funktionen die ich in den anderen Beispielen gesehen habe arbeiten und wie sie zusammespielen.
Verwende ich bei den gifs imagecopyresampled, so habe ich merkwürdige Störungen im thumbnail.
Ich glaube ich werde jetzt einfach die Bilder weiß einfärben. Ist zwar in dem fall nicht die beste Lösung, aber auch ok.
tut mir leid. Ich habe nur mit PNG-Dateien getestet.
Schöne Grüße
Julian
Hallo,
trotzdem Danke für deine Mühe.
Viele Grüße
Bene