Thumbnail-Generator
September 2009
Mit diesem Script wird ein Bild so verkleinert, damit es die angegebene maximale Breite bzw. Höhe nicht überschreitet. Dabei wird das Seitenverhältnis beibehalten.
Dazu ruft man per <img>-Tag die PHP-Datei imgThumb.php auf und übergibt dieser via Get-Variablen die maximale Breite w, die maximale Höhe h sowie der Pfad u zur Bilddatei relativ zur PHP-Datei oder absolut.
Die Transparenz bei PNG-Bildern wird beim Thumbnail beibehalten.
Angenommen, folgende PHP-Datei heisst thumbnail.php.
... dann wird mit folgendem HTML ein Thumbnail der Grafik photo.jpg von example.com generiert, das maximal 50 auf 50 Pixel gross ist.
Siehe auch:
Dazu ruft man per <img>-Tag die PHP-Datei imgThumb.php auf und übergibt dieser via Get-Variablen die maximale Breite w, die maximale Höhe h sowie der Pfad u zur Bilddatei relativ zur PHP-Datei oder absolut.
Die Transparenz bei PNG-Bildern wird beim Thumbnail beibehalten.
Angenommen, folgende PHP-Datei heisst thumbnail.php.
<?php
$bpfad = $_GET['u']; // Pfad/URL zum Bild
$breite = (int)$_GET['w']; // maximale Breite des Thumbnails
$hoehe = (int)$_GET['h']; // maximale Höhe des Thumbnails
$png = false; // ob Transparenz vorhanden sein könnte
$size = getimagesize($bpfad);
$verha = $size[0]/$size[1]; // Seitenverhältnis des Originals
$verhn = $breite/$hoehe; // Seitenverhältnis des grösstmöglichen Thumbnails
// wenn das Original kleiner als das Thumbnail ist
if($size[0]<=$breite & $size[1]<=$hoehe)
header('Location: '.$bpfad) and exit();
// wenn das Original breiter als das Thumbnail ist
elseif($verhn<$verha)
$nh = floor($breite*$size[1]/$size[0]) and $nb = ceil($nh*$verha);
// wenn das Original höher als das Thumbnail ist
else
$nb = floor($hoehe*$size[0]/$size[1]) and $nh = ceil($nb/$verha);
// Dateiendung erkennen
$datend = strtolower(substr(strrchr($bpfad,'.'),1));
switch($datend){
// originales Bild laden
case 'png': $bild = imagecreatefrompng($bpfad); $png = true; break;
case 'gif': $bild = imagecreatefromgif($bpfad); $png = true; break;
case 'jpg': case 'jpeg': $bild = imagecreatefromjpeg($bpfad); break;
default: header('Location: '.$bpfad); exit();
}
// leeres Thumbnail generieren
$thumb = imagecreatetruecolor($nb, $nh);
// Transparenz beibehalten
imagealphablending($thumb, false);
// originales Bild in das Thumbnail verkleinern,
// wobei das Seitenverhältnis des Originals beibehalten wird
imagecopyresized($thumb, $bild, 0, 0, 0, 0, $nb, $nh, $size[0], $size[1]);
imagedestroy($bild);
// Bild ausgeben
if($png){
header('Content-type: image/png');
imagepng($thumb);
}else{
header('Content-type: image/jpeg');
imagejpeg($thumb, '', 80);
}
imagedestroy($thumb);
?>
... dann wird mit folgendem HTML ein Thumbnail der Grafik photo.jpg von example.com generiert, das maximal 50 auf 50 Pixel gross ist.
<img src="thumbnail.php?w=50&h=50&u=http://example.com/photo.jpg" alt="" />
Siehe auch:

Andere Einträge
- Dateiendung erkennen
- Bilder und Memory size exhausted
- array_map_recursive()
- IP verkürzen
- is_utf8() – auf UTF-8 prüfen
MfG,
Lutz
nein die letzte Abfrage ist nur für die Transparenz zuständig.
Wenn $png = true soll ein transparentes Bild erstellt werden, also ein PNG
wenn $png = false wird nur ein jpeg erzeugt.