Thumbnails mit PHP?
herr nimmersatt
- php
Hi
Ich hab ne Bildergallerie mit PHP erstellt. DIe Bilder liegen in einem Ordner und werden nur verkleinert und dann als thumbnails dargestellt. Dies erfordert aber, wie man sich denken kann, wahnisinnig viel Ladezeit. WIe kann ich mit PHP Thumbnails erstellen. Allerdings sollen diese nicht irgendwie auf dem Webserver gespeichert werden sondern einfach nur vom Server verkleinert werden.
gruß herr nimmersatt
Moin!
Ich hab ne Bildergallerie mit PHP erstellt. DIe Bilder liegen in einem Ordner und werden nur verkleinert und dann als thumbnails dargestellt. Dies erfordert aber, wie man sich denken kann, wahnisinnig viel Ladezeit. WIe kann ich mit PHP Thumbnails erstellen. Allerdings sollen diese nicht irgendwie auf dem Webserver gespeichert werden sondern einfach nur vom Server verkleinert werden.
Das Speichern auf dem Server ist aber wirklich sehr anzuraten, denn _das_ spart Performance. Ich hab' hier ein kleines Skript, welches das Thumbnail-Bild aus Digitalkamera-Fotos extrahiert. Das dauert auf meinem kleinen P90-Server schätzungsweise 10 Sekunden pro Bild. Wenn ich die Bilder aber nicht nur an den Browser ausgebe, sondern auch noch auf dem Server abspeichere, dann dauert die Auslieferung eines gecachten Bildes nur noch wenige Bruchteile einer Sekunde.
Das Prinzip ist simpel: Du brauchst einen Cache-Speicher für die Thumbnails, der sich automatisch füllt, wenn ein Bild neu abgerufen wird, zu dem sich noch kein gecachtes Bild findet.
Zu diesem Thema interessante Funktionen:
imagecopyresampled() zum Verkleinern (die gdlib 2.0 ist hierbei wirklich vorzuziehen).
imagejpeg() bzw. imagepng() zum Speichern des Bildes in eine Datei - sowie zur Ausgabe bei der Erstgenerierung.
readfile() zum Durchleiten einer gespeicherten Datei.
header() zum Ausgeben des Bilder-Mimetyps.
getimagesize() vielleicht, zum Feststellen des Bildtyps der Originaldatei.
Kochanleitung:
Du schreibst ein Skript, welches mit <img src="thumbnail.php?image=imagename.jpg"> angesprochen wird. Dieses Bild liefert mit header() einen Bild-Mimetyp zurück (getimagesize() sagt, welchen), und schaut dann, ob die gewünschte Datei schon gecachet ist. Dazu ist es sinnvoll, ein Namensschema im Cache zu haben, was relativ simpel eindeutige Dateinamen generiert. Ich habe, weil ich keinen riesigen Verzeichnisbaum haben wollte, alle Dateinamen (inkl. Verzeichnisname) mit md5() codiert.
Wenn du ein gecachtes File findest, liefere es mit readfile() aus, ansonsten mußt du das Originalfile verkleinern. Also imagecreatefromjpeg() zum Einlesen des Originals, imagecreate() oder besser imagecreatetruecolor() zum Anlegen eines verkleinerten, noch leeren Bildes, und imagecopyresampled() zum Verkleinern. Die Ausgabe erfolgt dann zweifach: Erstens wird in eine Datei gespeichert, und zweitens an den Browser ausgegeben.
Es ist in diesem Zusammenhang sinnvoll, die Index-HTML-Seite mit allen Thumbnails automatisch erstellen zu lassen. Macht irgendwie weniger Arbeit.
- Sven Rautenberg