PHP: Gif->JPEG->verkleinern gibt schwarzes Bild

Jakob

Jakob

Aktives Mitglied
Thread Starter
Dabei seit
05.01.2004
Beiträge
1.070
Reaktionspunkte
21
Hallo, habe hier eine funktionierende Funktion, die aus einem Gif ein JPEG macht:
PHP:
private function gif2jpeg($p_fl, $p_new_fl='', $bgcolor=false)
	{
		list($wd, $ht, $tp, $at) = getimagesize($p_fl);
		$img_src = imagecreatefromgif($p_fl);
		$img_dst = imagecreatetruecolor($wd,$ht);
		$clr['red']=255;
		$clr['green']=0;
		$clr['blue']=0;
		if(is_array($bgcolor))
		{
			$clr=$bgcolor;
		}
		$kek = imagecolorallocate($img_dst,$clr['red'],$clr['green'],$clr['blue']);
		imagefill($img_dst,0,0,$kek);
		imagecopyresampled($img_dst, $img_src, 0, 0,0, 0, $wd, $ht, $wd, $ht);
		$draw = true;
		if(strlen($p_new_fl)>0)
		{
			if($hnd=fopen($p_new_fl,'w'))
			{
				$draw = false;
				fclose($hnd);
			}
		}
		if(true==$draw)
		{
			header("Content-type: image/jpeg");
			$tmp = imagecreatefromjpeg($img_dst);
			imagejpeg($img_dst);
		}
		else
		{
			imagejpeg($img_dst, $p_new_fl);
		}
		imagedestroy($img_dst);
		imagedestroy($img_src);
	}

Ein gif2jpeg('bild.gif') zeigt mir das Bild gleich im Browser an, da draw=false. Mit draw=true speichert es die Datei ab.

Nun möchte ich bevor ich die Datei speichere sie noch verkleinern (deshalb konvertiere ich ja erst nach JPEG. Gif-Strichzeichnungen kleiner machen sieht grausich aus.) also ein imagecopyresample. Nur kommt das kleine Bild immer nur komplett schwarz heraus.

Welchen Bilderstrom muss ich denn abfangen, damit ich diesen verkleinern kann? Ich dachte, ich nehme für den imagecopyresampled($target,imagecreatefromjpeg($img_dst),[…]). Geht aber wie gesagt nich.
Oder kennt ihr eine andere Möglichkeit Gifs ansprechend zu verkleinern?
 
Probier mal folgendes. Ich vewende es für meine dynamische Gallerie (Thumbs):
PHP:
header("Content-type: image/jpeg");
$faktor = 6;
$size = getimagesize($p_fl);
$width = round($size[0]/$faktor);
$height = round($size[1]/$faktor);
$src = imagecreatefromjpeg($p_fl);
$dest = imagecreatetruecolor($width,$height);
imagecopyresized($dest,$src,0,0,0,0,$width,$height,$size[0],$size[1]);
imagejpeg($dest);
imagedestroy($dest);
imagedestroy($src);

Das Bild wird um den Faktor 6
PHP:
$faktor
verkleinert.
 
Zurück
Oben Unten