Kleine Thumbnail-Datei

Um Bilder “on-the-fly” als Thumbnail zu erzeugen, habe ich mir eine Datei geschrieben, die als thumbnail.php statt der tatsächlichen JPEG-Bilddatei in den img-Tag des HTML-Codes geschrieben wird.

Sieht dann zum Beispiel so aus:

<img src="thumbnail.php?path=images/bild.jpg&height=80&width=80&q=70">

Der Aufruf erzeugt ein JPEG-Thumbnail mit 80 Pixel Höhe und Breite in 70% Qualität. Wird bei Höhe und Breite nur ein Wert angegeben, wird das Bild im gleichen Seitenverhältnis zum Original erzeugt.

Quelltext:

header("Content-type: image/jpeg");
header('Content-transfer-encoding: binary');

$Pfad = $_REQUEST["path"];
$Hoehe = 0;
$Hoehe = $_REQUEST["height"];
$Breite = 0;
$Breite = $_REQUEST["width"];
$Qual = $_REQUEST["Q"];

if (!$Qual)
    $Qual = 90;

$vpic = $Pfad;

if(!file_exists($vpic))
{
	$im = ImageCreate(1, 1);
	imagejpeg($im, '', 0);
	imagedestroy ($im);
	exit();
}

$imm = getimagesize ( $vpic );

if ($imm[0] > $Breite && $Breite > 0)
    $z = $imm[0]/$Breite;
else
    $z = 1;

if ($imm[1]/$z > $Hoehe && $Hoehe > 0)
    $z *= (($imm[1]/$z)/$Hoehe);

$NeueBreite = $imm[0]/$z;
$NeueHoehe =  $imm[1]/$z;

if($NeueBreite <= 1 || $NeueHoehe <= 1)
{
	$NeueBreite = $Breite;
	$NeueHoehe = $Hoehe;
}

$datei_array = split("/", urldecode($Pfad));
$datei = "";
for($i = 0; $i < sizeof($datei_array) - 1; $i++)
	$datei .= $datei_array[$i]."/";

$datei .= "thumb/";
if(!file_exists($datei))
{
	@mkdir($datei, 0777);
}

$dateiname = $datei_array[sizeof($datei_array) - 1];
$dateiname_array = explode(".", $dateiname);
$dateiname = "";
for($i = 0; $i < sizeof($dateiname_array) - 1; $i++)
	$dateiname .= $dateiname_array[$i] . ".";

$dateiname .= $NeueBreite . "_" . $NeueHoehe . ".jpg";

$datei .= $dateiname;

if(!file_exists($datei))
{
	$img = ImageCreateFromJPEG ( $vpic );
	if(!$img)
	{
		$im = ImageCreate(1, 1);
		imagejpeg($im, '', 0);
		imagedestroy ($im);
		exit();
	}

	imageinterlace($img, 1);
	$thumb = ImageCreateTrueColor($NeueBreite, $NeueHoehe);
	imageinterlace($thumb, 1);

	imagecopyresized ( $thumb, $img, 0, 0, 0, 0, $NeueBreite, $NeueHoehe, $imm[0], $imm[1] );

	if($NeueBreite >= 320)
	{
		$logopath = "./images/logo.png";
		$logosize = getimagesize($logopath);
		$logo = ImageCreateFromPNG($logopath);
		$logowidth = (int)($NeueBreite / 3);
		$logoheight = ($logowidth / $logosize[0]) * $logosize[1];

		imagecopyresampled($thumb, $logo, $NeueBreite - $logowidth, $NeueHoehe - $logoheight, 0, 0, $logowidth, $logoheight, $logosize[0], $logosize[1] ); 

		imagedestroy($logo);
	}

	imagejpeg($thumb, $datei, $Qual);
	imagejpeg($thumb, '', $Qual);

	imagedestroy ( $thumb );
	imagedestroy ( $img );
}
else
	readfile($datei);

Du kannst alle Antworten zu diesem Eintrag via RSS 2.0 Feed erfolgen. Du kannst einen Kommentar hinterlassen, oder einen Trackback von deiner eigenen Seite.

Einen Kommentar hinterlassen

XHTML: Diese Tags kannst Du benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>