Thumbnails erstellen mit Python Pillow – Praxisbeispiel

Wer eine Webseite betreibt, benötigt oftmals Thumbnails für Artikelbilder. Wir sehen uns an, wie dies mit der Python Bibliothek Pillow (Link zur Dokumentation) für mehrere Bilder automatisch durchgeführt werden kann.

Wir binden zunächst die benötigten Module ein.

Um unser Skript komfortabel verwenden zu können, erstellen wir eine Funktion mit vier Default Parametern. Beim Aufruf der Funktion kann die maximale Breite (maxw), die maximale Höhe (maxh), die zu verwendende Dateierweiterung (ext) sowie der Beschnitt (crop) festgelegt werden. Die Funktion wird in der Lage sein, quadratische Thumbnails zu erzeugen (Standardfall), oder nach Wunsch das Seitenverhältnis beizubehalten.

Die neu erstellten Bilder sollen in einem Unterordner gespeichert werden. Dieser erhält als Bezeichnung die Werte für Breite und Höhe der erzeugten Thumbnails. Das Anlegen des Ordners erfolgt mit einer Ausnahmebehandlung, da bei der Erzeugung die notwendigen Benutzerrechte vorhanden sein müssen. Sollte der Ordner bereits vorhanden sein, löst dies zwar einen Fehler aus – dieser wird jedoch ignoriert. Tritt ein anderer Fehler auf, wird das Programm beendet.

Wir durchlaufen nun alle Bilder mit der gewünschten Dateiendung im aktuellen Ordner. Bei den nachfolgenden open() und save() Operationen können Ausnahmefehler auftreten. Daher verwenden wir auch hier eine Behandlung für diese Fehler.

Im ersten Abschnitt öffnen wir das aktuelle Bild und ermitteln den Namen und die Dateierweiterung. Der Name des Originalbildes wird Bestandteil des Namens für das Thumbnail.

Anschließend erfolgt eine Fallunterscheidung in Abhängigkeit der boolschen Variable crop. Ist die Option Beschneidung aktiviert (crop=True), erfolgt die Ausführung der Funktion crop(). Die Werte für die neue (quadratische) Größe werden im Schritt davor ermittelt. Dabei wird die kürzere der beiden Seiten des Originalbildes ermittelt. Anschließend werden mit diesem Wert die Positionen der neuen Eckpunkte berechnet. Nach dem Beschnitt und der Verkleinerung mit thumbnail() erfolgt die Speicherung des Thumbnails im zuvor angelegten Unterordner.

Soll das Seitenverhältnis beibehalten werden (crop=False), wird der else Zweig der Fallunterscheidung ausgeführt. Dabei wird nur eine Verkleinerung durchgeführt und das Bild gespeichert. Die Funktion thumbnail() erzeugt immer ein Bild, bei dem das Seitenverhältnis mit dem Original übereinstimmt.

In beiden Fällen beinhaltet der Dateiname des Thumbnails auch die neuen Seitenlängen.

Wir können nun nun automatisch Thumbnails in verschiedenen Größen erzeugen. Dazu rufen wir die Funktion save_thumbnail() mit den gewünschten Parametern auf.

Um eine korrekte Funktion zu gewährleisten, muss sich das Skript in dem Ordner befinden, in dem die gewünschten Originalbilder liegen. Die Ausführung des Skripts erfolgt mit:

python3 python_pillow_thumbnail.py

Sofern das Skript korrekt ausgeführt wird und sich im Ordner zumindest eine .jpg und eine .png Datei befindet, sind nun zwei Unterordner vorhanden. Der eine hat den Namen „64×64“ und der andere den Namen „120×120“. Im ersten befinden sich die .jpg Bilder, die auf die Standardgröße (64×64) verkleinert wurden. Diese wurden auch quadratisch beschnitten. Im zweiten Ordner liegen .png Bilder, deren Seitenverhältnis dem Original entspricht. Die Abmessungen der Bilder sind maximal 120 Pixel in der Höhe und maximal 120 Pixel in der Breite.

Das komplette Beispiel herunterladen: python_pillow_thumbnail.zip

Über Anton Neururer 31 Artikel
Ich bin Programmierer und Blogger. Themen die mich besonders interessieren sind Python, C++ und Javascript. Des Weiteren befasse ich mich mit Fraktalen.

Hinterlasse jetzt einen Kommentar

Kommentar hinterlassen