RSS-Symbol
Wenn Du über neue Weblog-Einträge Bescheid wissen möchtest, dann abonniere einfach den Atom-Feed oder folge mir bei Twitter.

Einfache Thumbnail-Funktion

Datum29. Mai 2009 · Kommentare0 Kommentare · Schlagwörtercode, funktion, php, schnipsel, thumbnail

Bei meiner Arbeit am Blog stoße ich immer wieder auf Probleme, die eine adäquate Lösung verlangen. Im Web gibt es zahlreiche Funktionen, die diese Probleme lösen (sollen). Doch nicht immer sind diese Funktionen auch nach meinem Geschmack. Deshalb nutze ich meist nur die grundlegenden Ideen dieser Funktionen und schreibe dann einfach meine eigenen.

Daher möchte ich nun einmal die Thumbnail-Funktion vorstellen, die ich hier benutze und die mir schon sehr gut gefällt.

<?php
function create_thumbnail($src_file, $max_x = 60, $max_y = 60) {
	if(extension_loaded('gd') === FALSE)
		return FALSE;

	list($src_x, $src_y, $type) = getimagesize($src_file);

	switch($type) {
		case IMAGETYPE_JPEG:
			$src_img = imagecreatefromjpeg($src_file);
		break;

		case IMAGETYPE_PNG:
			$src_img = imagecreatefrompng($src_file);
		break;

		case IMAGETYPE_GIF:
			$src_img = imagecreatefromgif($src_file);
		break;

		default:
			return FALSE;
	}

	if(is_resource($src_img) === FALSE)
		return FALSE;

	$ratio = min($max_x/$src_x, $max_y/$src_y);
		
	$thumb_x = round($src_x * $ratio);
	$thumb_y = round($src_y * $ratio);

	if($ratio < 1) {
		$thumb_img = imagecreatetruecolor($thumb_x, $thumb_y);
		imagecopyresampled($thumb_img, $src_img, 0, 0, 0, 0, $thumb_x, $thumb_y, $src_x, $src_y);
	} else {
		$thumb_img =& $src_img;
	}

	$thumb_file = '/'.$src_file;

	switch($type) {
		case IMAGETYPE_JPEG:
			imagejpeg($thumb_img, $thumb_file, 50);
		break;

		case IMAGETYPE_PNG:
			imagepng($thumb_img, $thumb_file);
		break;

		case IMAGETYPE_GIF:
			imagegif($thumb_img, $thumb_file);
		break;

		default:
			imagejpeg($thumb_img, $thumb_file, 50);
	}

	@imagedestroy($src_img);

	# nur freigeben, wenn ein Thumb nötig war (wegen Referenz)
	if($ratio < 1)
		@imagedestroy($thumb_img);

	return TRUE;
}
?>

Die Schnittstelle gestaltet sich sehr einfach. Übergeben werden nur Pfad und Dateiname der Ursprungsdatei und die maximale Ausdehnung in X- und Y-Richtung der Thumbnail-Datei. Die Ursprungsdatei wird dann proportional verkleinert, je nachdem welche Dimension überschritten wurde.

Die angegebene Funktion ist sicher nicht perfekt. Für Verbesserungsvorschläge bin ich immer offen und werde sie wenn nötig auch gerne einbauen.

Die Funktion steht, wie alle anderen Blog-Inhalte auch, unter einer Creative Commons-Lizenz.

Bild vom Autor

Über den Autor: Christian

Im April 2007 habe ich dieses Blog aus der Taufe gehoben und schreibe seitdem unregelmäßig über interessante Themen. Über einen Besuch meiner Profile bei Twitter, Google+ und XING würde ich mich freuen.

Kommentare

 

Mitreden? Dann jetzt kommentieren!

Gestattete BBCode-Formatierungen sind [blockquote], [code], [em], [strong], [url].

* Pflichtfeld · E-Mail-Adresse ist nicht öffentlich sichtbar.