Thumbnails mit PHP erzeugen

Manchmal möchte man Bilder, die auf einer Website dargestellt werden sollen, verkleinern. Solche verkleinerten Bilder nennt man Thumbnails.

Manchmal möchte man Bilder verkleinern, um sie in einer Übersicht anzuzeigen. Der einfachste Weg ist, die Bilder durch HEIGHT= ... und WIDTH= ... im <IMG>-Tag zu verkleinern. Dabei wird zwar das Bild optisch verkleinert, aber die Dateigröße und somit die Übertragungszeit bleiben gegenüber der vollen Größe unverändert.

Besser ist es, Thumbnails von den Bildern zu erzeugen. PHP bietet alles, was man dafür braucht.

Bevor man sich mit der Verkleinerung von Bildern beschäftigt, sollte man abklären, ob der Provider die notwendigen Extensions anbietet. Listen Sie mit "phpinfo()" die Einstellungen auf und kontrollieren Sie ob GD enthalten ist. Andernfalls würde das nachfolgende Script auf Ihrem Server nicht laufen.

Zum Testen und Entwickeln müssen Sie natürlich auch Ihren lokalen Webserver entsprechend konfigurieren. Dazu müssen die benötigten Extensions geladen werden. In der PHP.INI wird dafür der Eintrag "extension=php_gd.dll" aktiviert, indem das vorangestellte ";" entfernt wird.

Die Datei "php_gd.dll" enthält ab der Version 1.6 nur mehr die Funktionen für .JPG und .PNG Dateien. Für .GIF Dateien wird die "php_gd_gif.dll" benötigt. Achten Sie auch darauf, daß der Pfad zu den Extensions in der PHP.INI richtig eingestellt ist (z.B. extension_dir ="C:php4extensions").

Hier nun das Script:


    <?php
$PicPathIn
="../bilder/";
$PicPathOut="../bilder/out/";

// Orginalbild
$bild="Foto.jpg";

// Bilddaten ermitteln
$size=getimagesize("$PicPathIn"."$bild");
$breite=$size[0];
$hoehe=$size[1];
$neueBreite=100;
$neueHoehe=intval($hoehe*$neueBreite/$breite);

if(
$size[2]==1) {
// GIF
$altesBild=ImageCreateFromGIF("$PicPathIn"."$bild");
$neuesBild=imageCreate($neueBreite,$neueHoehe);
imageCopyResized($neuesBild,$altesBild,0,0,0,0,$neueBreite,$neueHoehe,$breite,$hoehe);
imageGIF($neuesBild,"$PicPathOut"."TN"."$bild");
}

if(
$size[2]==2) {
// JPG
$altesBild=ImageCreateFromJPEG("$PicPathIn"."$bild");
$neuesBild=imageCreate($neueBreite,$neueHoehe);
imageCopyResized($neuesBild,$altesBild,0,0,0,0,$neueBreite,$neueHoehe,$breite,$hoehe);
ImageJPEG($neuesBild,"$PicPathOut"."TN"."$bild");
}

if(
$size[2]==3) {
// PNG
$altesBild=ImageCreateFromPNG("$PicPathIn"."$bild");
$neuesBild=imageCreate($neueBreite,$neueHoehe);
imageCopyResized($neuesBild,$altesBild,0,0,0,0,$neueBreite,$neueHoehe,$breite,$hoehe);
ImagePNG($neuesBild,"$PicPathOut"."TN"."$bild");
}

echo 
"Altes Bild:<BR>";
echo 
"<IMG SRC="$PicPathIn$bild" WIDTH="$breite" HEIGHT="$hoehe"><BR><BR>";
echo 
"Neues Bild:<BR>";
$Thumbnail=$PicPathOut."TN".$bild;
echo 
"<IMG SRC="$Thumbnail" WIDTH="$neueBreite" HEIGHT="$neueHoehe">";
?>
    

Mit "$size=getimagesize("$PicPathIn"."$bild")" werden die Eigenschaften des Bildes ermittelt. Die Funktion liefert ein Array zurück, das die Breite, die Höhe und den Bildtyp enthält.

Da für jeden Bildtyp eigene Funktionen anzuwenden sind, muß mit "if($size[2]==...)" entsprechend unterschieden werden.

Das Herzstück ist die Funktion "ImageCopyResized()". Damit wird das neue Bild erzeugt. Allerdings benötigt die Funktion nicht die Dateinamen des Orginalbildes bzw. der Zieldatei, sondern den Identifier dieser Dateien.

Diese Identifier werden von den Funktionen "ImageCreateFrom...()" für das Orginalbild und "ImageCreate()" für die Zieldatei erzeugt.

Der Rest ist ganz einfach. Der Funktion "ImageCopyResized()" werden die Identifier, die Startpositionen (0,0) und die Bildformate übergeben. Das Resultat wird mit "Image...()" in die entsprechende Datei geschrieben. Im obigen Script habe ich den verkleinerten Dateien die Buchstaben "TN" als Kennzeichnung für Thumbnails vorangestellt. Andernfalls würde man die Orginaldatei überschreiben, wenn man die Thumbnails im selben Directory ablegt.

Wenn Sie die erzeugte Bilddatei ansehen, ist sie natürlich optisch kleiner und benötigt entsprechend weniger Speicherplatz und somit auch weniger Übertragungszeit.

Ratings


Anfängerproblem ?!

In den img-Anzeigen

echo "<IMG SRC="$PicPathIn$bild" WIDTH="$breite" HEIGHT="$hoehe"><BR><BR>"; und
echo "<IMG SRC="$Thumbnail" WIDTH="$neueBreite" HEIGHT="$neueHoehe">";

musste ich in der SRC-Adresse die doppelten Hochkommas (") durch einfache Hochkommas (') ersetzen. Liegt das daran dass ich mit php 5.5.11 arbeite?

Ansonsten Danke für die super Hilfe
Written by halweks At 27.08.2014 17:41:29

Here you can write a comment


Please enter at least 10 characters.
Loading... Please wait.
* Pflichtangabe

Related topics

Fortschrittsbalkens mit PHP

ProgressClass stellt eine PHP-Klasse für die dynamische Anzeige und Veränderung eines Fortschrittsbalkens zur Verfügung. ...

what@

Autor : what@
Category: PHP-Tutorials

Verschlüsslung bzw. Codierung von HTML Code in ASCII

HTML Code können wir ebenso gut in ASCII Code umwandeln. Zunächst einmal ein paar Sätze dazu, wozu man ASCII Zeichen benötigt und wozu Ihnen dieses Script dient. ...

Lukas Beck

Autor : Lukas Beck
Category: PHP-Tutorials

Werte aus Flash an PHP und JavaScript, und umgekehrt senden

Dieses Tutorial soll euch zeigen, auf welche Weise ihr Werte aus Flash an PHP und JavaScript, und umgekehrt senden könnt. ...

Borlabs

Autor : Borlabs
Category: Other tutorials

Text-Counter mit IP-Sperre ( Cookies oder Datei)

In diesem Tutorial möchte ich erklären wir man auf 2 arten einen Counter Programmieren kann,nebenbei werden ein paar Datei Funktionen erklärt! ...

support1@

Autor : support1@
Category: PHP-Tutorials

How to effectively perform complex queries with SQL queries in MySQLi?

This MySQL tutorial explains how to efficiently perform complex SQL queries in MySQLi. We will look at various aspects of database querying and learn specific methods to fully utilise the power of MySQLi. ...

TheMax

Autor : TheMax
Category: mySQL-Tutorials

PHP 7 Virtual Machine

Dieser Artikel zielt darauf ab, einen Überblick über die Zend Virtual Machine, wie es in PHP 7 gefunden wird. ...

admin

Autor : admin
Category: PHP-Tutorials

Verschlüsselungsalgorithmus

Dieses Tutorial zeigt einen Verschlüsselungsalgorithmus von Texten nach dem PHP Data Encryption Standard. ...

Lukas Beck

Autor : Lukas Beck
Category: PHP-Tutorials

Einfaches Gästebuch basierend auf php4 und MySQL

In diesem Tutorial lernt Ihr wie einfach es ist, ein Gästebuch mit php4 und MySQL zustellen. ...

webmaster1@

Autor : webmaster1@
Category: PHP-Tutorials

Publish a tutorial

Share your knowledge with other developers worldwide

Share your knowledge with other developers worldwide

You are a professional in your field and want to share your knowledge, then sign up now and share it with our PHP community

learn more

Publish a tutorial