de.comp.lang.php.* FAQ

22.3. Wie kann ich Bilder verkleinern?

Antwort von Johannes Frömter

Mit den Image-Funktionen von PHP lassen sich Grafiken direkt mit PHP-Befehlen bearbeiten (je nach installierter Grafikbibliothek im JPG-, PNG- und/oder GIF-Format). Eine häufig gewünschte Funktion ist das Verkleinern von Bildern, um eine schneller zu ladende Vorschau bieten zu können.

Allerdings ist dies eine sehr rechenintensive Angelegenheit. Mit einer Galerie von 30 Bildern à 200 Kilobyte, die bei jedem Seitenaufruf neu skaliert werden, kann man einen Server leicht an die Lastgrenze bringen (und den Hoster zur Verzweiflung). Daher ist hier ein Caching-Mechanismus unerlässlich, der dafür sorgt, dass jedes Bild möglichst nur einmal berechnet wird (z.B. nach einem Upload oder einer Änderung), und ansonsten das gespeicherte Bild direkt ausliefert.

Christian Lamine zeigt in einem Tutorial, wie man so etwas realisieren kann. Ein ähnliches Script stellt die phpThumbnailer-Klasse dar.

Werden die Bilder in der Form image.php?datei=bild.jpg&x=40&y=30 referenziert, wird natürlich für jedes Bild bei jedem Seitenaufruf ein eigener PHP-Prozess gestartet (auch wenn dieser die Bilddaten nur per fpassthru() durchschiebt). Solange PHP als Webserver-Modul läuft, ist dies weniger dramatisch - gerade bei den großen Hostinganbietern wird aber oft die CGI-Variante von PHP eingesetzt, und da erzeugt dies eine beträchtliche Serverbelastung.

In der Regel wird zur Skalierung die Funktion ImageCopyResized() genutzt. Die Qualität ist hierbei je nach Auflösung und Farbtiefe nicht besonders gut. Ab PHP 4.0.6 gibt es zusätzlich die Funktion ImageCopyResampled() (benötigt mindestens GD 2.0.1), die dank Anti-Aliasing hübschere Ergebnisse liefert. Eine weitere Möglichkeit ist die Nutzung von externen Tools wie ImageMagick, das zwar sehr gute Ergebnisse produziert, bei den meisten Hostern aber vermutlich nicht verfügbar ist.

Valid HTML 4.01! Valid CSS!

22.3. Wie kann ich Bilder verkleinern?
http://www.php-faq.de/q/q-grafik-verkleinern.html
Archiv der de.comp.lang.php-FAQ Dies ist eine Archivseite von 2008 und wurde seitdem nicht geändert. Das dclp-FAQ-Team