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.
<?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($thumbfalse);

// originales Bild in das Thumbnail verkleinern,
// wobei das Seitenverhältnis des Originals beibehalten wird
imagecopyresized($thumb$bild0000$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&amp;h=50&amp;u=http://example.com/photo.jpg" alt="" />
Siehe auch:
 


Andere Einträge


Kommentare

#1
von lutz am 16.04.2010
Fehlt unten bei der Bildausgabe nicht auch eine Abfrage auf GIF-Dateien bzw. die entsprechende Funktion dafür imagegif()?

MfG,
Lutz

#2
von Domo am 03.07.2013
@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.

#3
von Jakob Rohländer am 09.06.2014
Gut, aber ich würde das gesamte Script noch gegen Angriffe absichern.