Thumbnail Generierung > Seitenverhältnis > PHP
Was tun, wenn man einheitlich große Thumbnails generieren will, die Originalbilder aber unterschiedliche Formate haben? Irgendwie muss das Seitenverhältnis der Bilder automatisch angepasst wird. Daher folgt hier ein kleines Code-Snippet, das einheitlich große Thumbnails generiert und dabei das Seitenverhältnis berücksichtigt.
Voraussetzungen:
- PHP 4.3.x oder höher
- GD Library 2.x oder höher
// Pfadangaben $imagePath = 'pfad/zum/original/bild.jpg'; $thumbPath = 'pfad/zum/thumbnail/100x100/bild.jpg'; // Zielbreite und -höhe festlegen $width = 100; $height = 100; // Originalbild laden und Größen entnehmen $img = imagecreatefromjpeg($imagePath); // oder: imagecreatefrompng(), imagecreatefromgif() $originalWidth = imagesx($img); $originalHeight = imagesy($img); // Rahmengröße initialisieren $frameWidth = $width; $frameHeight = $height; // Das Thumbnail sollte nicht größer sein als das Original if($height > $originalHeight && $width > $originalWidth) { $width = $originalWidth; $height = $originalHeight; } // Hier wird die eigentliche Thumbnailgröße dem Seitenverhätlnis angepasst if($originalWidth / $originalHeight >= $frameWidth / $frameHeight) { $height = round(($width / $originalWidth) * $originalHeight); } else { $width = round(($height / $originalHeight) * $originalWidth); } // Position des Thumbnails berechnen (Mitte) $x = round(($frameWidth - $width) / 2); $y = round(($frameHeight - $height) / 2); // Ausgabebild erstellen mit Rahmengröße $out = imagecreatetruecolor($frameWidth, $frameHeight); // Hintergrundfarbe (hier weiß) $bgcolor = imagecolorallocate($out, 255, 255, 255); imagefill($out, 0, 0, $bgcolor); // Verkleinertes Originalbild in das neue Bild einfügen imagecopyresampled($out, $img, $x, $y, 0, 0, $width, $height, $originalWidth, $originalHeight); // Als JPEG abspeichern, Qualität 90% imagejpeg($out, $thumbPath, 90); // Aufräumen... imagedestroy($img); imagedestroy($out); |
Eigentlich sollte der Code selbsterklärend sein, ich möchte es aber trotzdem kurz nochmal erklären.
Wir errechnen also erst die Breite und Höhe des Thumbnails für das korrekte Seitenverhältnis und erstellen dann ein “Rahmen”-Bild in das wir unser verkleinertes Bild einfügen. So wird das Thumbnail immer 100×100 Pixel groß, nur bleibt halt ein Teil weiß um das Seitenverhältnis auszugleichen.