Thumbnails mit PHP erzeugen
Manchmal möchte man Bilder, die auf einer Website dargestellt werden sollen, verkleinern. Solche verkleinerten Bilder nennt man Thumbnails.
2003-01-11 00:31:22 2003-01-11 00:31:22 Wolfgang13
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
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
Here you can write a comment
Related topics
Templates in PHP
Ein kleines Tutorial zum Einsatz von Templates in PHP am Beispiel der Apolda Templateklasse (kuerbis.org/template/) ...
Autor :
stulgies@
Category:
PHP-Tutorials
Variablen über mehrere Seiten hinweg verwenden - der Session-Befehl macht 's möglich!
Oberste Voraussetzung um Session-Befehle korrekt auszuführen ist, dass der Provider a) PHP und b) das speichern von Sessions auf dem Server überhaupt erlaubt. Wird der Session-Befehl unterstützt jedoch nicht das direkte speichern von Sessions bzw. Sess ...
Autor :
ndo@
Category:
PHP-Tutorials
phpinfo() shows nothing
Today I want to show you how to output the phpinfo(). ...
Autor :
Webmasterfreaky
Category:
PHP-Tutorials
Tutorials zu Facebook Anwendungen mit PHP
In mehreren Tutorials wird der Zugriff auf Facebook Daten mittels Graph API, FQL und REST API erklärt. Alle Codebeispiele liegen zum Ausprobieren in einem SVN, bzw. github Repository bereit. ...
Autor :
abouttheweb
Category:
PHP-Tutorials
Login mit Hilfe von PHP und mySQL
Dieses Tutorial soll die Grundzüge eines Login-Systems auf der Basis von PHP und mySQL unter Zuhilfenahme von Sessions klären. ...
Autor :
razorblade
Category:
PHP-Tutorials
Basics of views in MySQL
Views in a MySQL database offer the option of creating a virtual table based on the result of an SQL query. This virtual table can be queried like a normal table without changing the underlying data. ...
Autor :
admin
Category:
mySQL-Tutorials

