Thumbnail Generierung > Seitenverhältnis > PHP

Was tun, wenn man einheitlich große Thumbnails generieren will, die Originalbilder aber in unterschiedlichen Formaten vorliegen? Irgendwie muss das Seitenverhältnis der Bilder automatisch angepasst werden. 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 an dieser Stelle trotzdem kurz darauf eingehen.
Wir errechnen zunächst 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.

Performance-Optimierung von PHP-Anwendungen mit Xdebug

Wer schonmal wirklich(!) große Anwendungen in PHP geschrieben hat, ist vielleicht auch auf das Problem Performance gestoßen. Die Seite lädt viel zu lange und man findet einfach nicht heraus, woran es liegt oder an welcher Stelle man die Anwendung bzw. eine Funktion optimieren kann. In einer solchen Situation gibt es nur noch eine Möglichkeit: Profiling.

» Weiterlesen

target=“_blank“ und XHTML Strict

Wer seine Website schonmal mit XHTML Strict durch den W3C HTML-Validator gejagt hat, wird feststellen, dass einige Attribute inzwischen nicht mehr erlaubt sind. Dazu gehört unter anderem der Befehl target=“_blank“, der Links in einem neuen Fenster oder Tab öffnen lässt.

Der Benutzer soll selbst entscheiden, ob ein Link in einem neuen Fenster geöffnet werden soll, oder nicht.

Dieser These kann ich mich nicht unbedingt anschließen, denn inzwischen erwartet man einfach, dass sich externe Links in einem neuen Tab öffnen. Natürlich gibt es immer noch Workarounds, um den gewünschten Effekt zu erzielen. Aus dem Grund stelle ich an dieser Stelle eine (wie ich finde) sehr elegante Lösung vor, die zwar auf JavaScript basiert, aber auch funktioniert, wenn JavaScript im Browser deaktiviert ist.
Eine zweite Methode basiert auf CSS3, die allerdings noch nicht von allen Browser vollständig unterstützt wird. Ich rate daher vorerst auf JS zurückzugreifen.

» Weiterlesen