IT-Academy Logo
Sign Up Login Help
Home - Programmieren - PHP - Thumbnails mit PHP erzeugen



Thumbnails mit PHP erzeugen

Dieser Artikel erklärt, wie man mit PHP Bilder verkleinern kann.


Autor: Wolfgang Arnberger (Wolfgang)
Datum: 23-01-2002, 19:31:23
Referenzen: http://www.it-studio.net
Schwierigkeit: Profis
Ansichten: 17461x
Rating: 6 (3x bewertet)

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Thumbnails erzeugen 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:\php4\extensions").

Hier nun das Script:

$PicPathIn="../bilder/";
$PicPathOut="../bilder/out/";

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

// Bilddaten feststellen
$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:
";
echo " HEIGHT=\"$hoehe\">


";
echo "Neues Bild:
";
$Thumbnail=$PicPathOut."TN".$bild;
echo " 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.

Download des Scripts unter http://www.it-studio.net/



SKynet
Rookie
Beitrag vom:
30-03-2005, 02:56:12

um die qualität der thumbs zu erhalten

wenn man anstatt der function
imagecopyresized imagecopyresampled nutzt erhält man eine bedäutend bessere qualität

mfg skynet

-----------------------------------------------------
das Leben ist eine Lüge


fmarco
Rookie
Beitrag vom:
04-02-2004, 13:27:26

ok, hab die lösung =)

also damit das auch noch gut aussieht, falls man es jetzt nicht nur für tumbnails braucht:

$neuesBild=imagecreatetruecolor($neueBreite,$neueHoehe);

statt nur imagecreate

-----------------------------------------------------
gruss Marco F.


fmarco
Rookie
Beitrag vom:
25-11-2003, 12:00:07

Qualität

Hallo Warum habe ich so eine schlechte Qualität? Wenn ich das Bild auf Breite 600 mache, müsste das doch trotzdem eine einigermassen gute Qulaität sein? Gibt es Möglichkeiten, die JPG-Komprimierung einzustellen, usw.?

-----------------------------------------------------
gruss Marco F.


[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04506
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06241
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1140
Comments: 0