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.

HTTP-Authentifizierung über PHP

Ich muss euch leider schreiben, dass dies hier mein letzter Artikel auf diesem Blog ist … zumindest für dieses Jahr.

Einen Tag vor Silvester hab ich aber noch einen kleinen Beitrag über HTTP-Authentifizierung. Wer keine Lust hat, jedes Mal eine .htaccess-Datei für einen Passwortschutz anzulegen, der kann diesen kleinen Code-Schnipsel für seine PHP-Anwendung nutzen.

if(!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])
|| $_SERVER['PHP_AUTH_USER'] != 'benutzername' || $_SERVER['PHP_AUTH_PW'] != 'passwort')
{
	header('WWW-Authenticate: Basic realm="Authentifizierung"');
	header('HTTP/1.0 401 Unauthorized');
	echo '<h1>Error 401 - Unauthorized!</h1>';
	exit;
}

Das Ganze lässt sich natürlich noch an eine Datenbank anschließen und mit verschlüsselten Passwörtern verwenden…