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.