![]() |
SELFHTML Forumsarchiv |
|
|
Die folgende Nachricht zum Thema stammt von: AllesMeins, 18. 02. 2005, 15:27
Hiho,
ich versuche mich gerade an einem kleinen Script das aus hochgeladenen Bildern thumbnails erstellt. das klappt auch wunderbar nur leider geht dabei transparenz von gifs bzw. pngs verloren. Wie muss ich das nachfolgende erweitern damit auch die Transparenz erhalten bleibt?
bilder.php (gekürzt):
================================
$pic_infos = getimagesize($_FILES['userfile']['tmp_name']);
/*Faktor ermitteln mit dem das Bild verkleinert werden muss damit es eine gewisse maximalgrösse ($max_breite bzw. $max_hoehe) nicht übersteigt*/
if($pic_infos[0] > $max_breite){
$faktor_b = $max_breite / $pic_infos[0];
}
if($pic_infos[1] > $max_hoehe){
$faktor_h = $max_hoehe / $pic_infos[1];
}
$faktor = min($faktor_h,$faktor_b);
/*Das eben hochgeladenen Bild zum bearbeiten öffnen*/
if($pic_infos[2] == 2){
$source = imagecreatefromjpeg($_FILES['userfile']['tmp_name']);
} elseif($pic_infos[2] == 3) {
$source = imagecreatefrompng($_FILES['userfile']['tmp_name']);
} elseif($pic_infos[2] == 1) {
$source = imagecreatefromgif($_FILES['userfile']['tmp_name']);
}
/*Zielbild generieren*/
$target = imagecreatetruecolor($pic_infos[0] * $faktor,$pic_infos[1] * $faktor);
/*Hochgeladenes Bild auf neues Bild verkleinert kopieren*/
imagecopyresampled($target, $source, 0, 0, 0, 0, $pic_infos[0] * $faktor, $pic_infos[1] * $faktor, $pic_infos[0], $pic_infos[1]);
/*Abhängig vom Format der Quelldatei die Zieldatei schreiben*/
if($pic_infos[2] == 2){
imagejpeg($target, "news/images/" . $_FILES['userfile']['name']);
} elseif($pic_infos[2] == 3) {
imagepng($target, "news/images/" . $_FILES['userfile']['name']);
} elseif($pic_infos[2] == 1) {
imagegif($target, "news/images/" . $_FILES['userfile']['name']);
}
================================
Hmm, ist leider ziemlich viel Code geworden, aber mehr kann ich wohl schlecht rauskürzen. Ansonsten dürfte die Funktionsweise wohl nicht mehr klar werden. Ich hoffe irgendwer ist bereit sich das mal anzusehen und mir zu helfen...
Grüsse
Marc
Die folgende Nachricht zum Thema stammt von: Bio, 18. 02. 2005, 18:21
Sup!
Du darfst einfach keine JPEG-Thumbnails erstellen, denn JPEG kann keine Transparenz. Voila!
Gruesse,
Bio
--
Keep your friends close, but your enemies closer!
Die folgende Nachricht zum Thema stammt von: Sven Rautenberg, 18. 02. 2005, 18:57
Moin!
»» Sup!
»»
»» Du darfst einfach keine JPEG-Thumbnails erstellen, denn JPEG kann keine Transparenz. Voila!
Genau deshalb steht doch ganz zum Schluß des Codes eine Abfrage drin, welches Originalformat vorlag, damit das Thumbnail im gleichen Format gespeichert wird.
- Sven Rautenberg
Die folgende Nachricht zum Thema stammt von: Sven Rautenberg, 18. 02. 2005, 19:00
Moin!
»» nur leider geht dabei transparenz von gifs bzw. pngs verloren. Wie muss ich das nachfolgende erweitern damit auch die Transparenz erhalten bleibt?
http://de2.php.net/manual/en/function.imagealphablending.php
http://de2.php.net/manual/en/function.imagesavealpha.php
Alles klar?
- Sven Rautenberg
Die folgende Nachricht zum Thema stammt von: AllesMeins, 18. 02. 2005, 21:53
Hiho,
danke für die Antwort. Leider will esnoch immer nicht so ganz... Ich habe jetzt nach dem $target = imagecreatetruecolor() ein
imagealphablending ( $target, true );
imagesavealpha($target, true);
eingefügt. Hilft aber nichts ich erhalte immer noch nen schwarzen Rand anstatt der Transparenz (sowohlö bei gifs als auch bei pngs)...
Marc
Die folgende Nachricht zum Thema stammt von: Achim Janowski, 18. 02. 2005, 21:58
Hallo!
Setz mal bei
imagealphablending ( $target, true );
statt "true" ein "false".
Gruß, Achim
Die folgende Nachricht zum Thema stammt von: AllesMeins, 18. 02. 2005, 23:01
Hiho,
ich habde den Eindruck wir nähern uns dem Ziel :) Jetzt funktioniert die Transparenz bei PNGs wunderbar - bei gifs leider noch nicht...
Marc
Die folgende Nachricht zum Thema stammt von: Achim Janowski, 19. 02. 2005, 07:52
Hallo!
bei GIFs habe ich das so gelöst (allerdings jetzt mit "meinen" Variablennamen, nicht mir Deinen...).
$colorTransparent = imagecolortransparent($image);
$newimage = imagecreate($width, $height);
imagepalettecopy($newimage, $image);
imagefill($newimage, 0, 0, $colorTransparent);
imagecolortransparent($newimage, $colorTransparent);
imagecopyresized($newimage, $image, 0, 0, 0, 0, $width, $height, $xwert, $ywert);
Gruß, Achim
Die folgende Nachricht zum Thema stammt von: Sven Rautenberg, 18. 02. 2005, 23:04
Moin!
»» Setz mal bei
»» imagealphablending ( $target, true );
»»
»» statt "true" ein "false".
Alphablending = true sorgt dafür, dass der Alphawert des Pixels mit dem Hintergrund zusammengerechnet wird zu einer Mischfarbe. Deshalb: Vorher ist der Hintergrund schwarz, der neue Pixel ist 100% transparent. Ergebnis: 100% schwarz.
Mit Alphablending= false wird dieses Mischen abgeschaltet, die Transparenzinformation bleibt erhalten - genau das ist gewünscht.
Steht so auch in der Doku zu imagesavealpha drin, btw. ;)
"You have to unset alphablending (imagealphablending($im, FALSE)), to use it."
- Sven Rautenberg
© 1998-2008
Impressum, Software: Classic Forum