Die Python Bibliothek Pillow ist im Umgang mit Bildern vielseitig einsetzbar (Link zur Dokumentation). In diesem Artikel zeige ich die Entwicklung eines Skripts, das Bilder konvertieren kann. Das vorgestellte Programm kann in einen Ordner mit Bildern ausgeführt werden. Alle dort gefunden Bilder im PNG Format werden automatisch in das JPEG Format umgewandelt. Anschließend werden die originalen Dateien gelöscht.
Für die Bearbeitung der Bilder und den Dateizugriff binden wir zuerst die Module os
und PIL
(Pillow) ein.
1 2 3 4 |
# Module importieren import os from PIL import Image import sys |
Anschließend ermitteln wir zuerst den aktuellen Dateipfad mit der Funktion os.path.dirname()
. Wir durchlaufen mit einer Schleife alle Dateien im Ordner und überprüfen, ob diese die Endung ".png"
haben. Ist dies der Fall, versuchen wir die Datei zu öffnen. Zur Ermittlung des neuen Dateinamens verwenden wir os.path.splitext()
. Wir erhalten den Namen der aktuellen Datei und versehen ihn mit einer neuen Dateiendung (outfile
). Anschließend erzeugen wir ein neues Bild und konvertieren die originalen Bildinhalte in das RGB Format. Wir speichern das umgewandelte Bild mit dem neuen Namen und schließen die Originaldatei. Sollte bei dem Vorgang ein Lese – oder Schreibfehler auftreten, fangen wir diesen ab, geben Fehlermeldungen aus und beenden das Programm. Es könnte zum Beispiel ein Schreibfehler auftreten, wenn der Anwender nicht über Schreibrechte für den aktuellen Ordner verfügt.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# aktuellen Pfad ermitteln dir_path = os.path.dirname(os.path.realpath(__file__)) # Alle gefundenen PNG's umwandlen for infile in os.listdir(dir_path): # nur PNG Dateien berücksichtigen if infile.endswith(".png"): try: # Originalbild öffnen image = Image.open(infile) # Dateiname von Dateierweiterung trennen filename, extension = os.path.splitext(infile) # Name für neue Datei ermitteln outfile = filename + '.jpg' # Bild in RGB Werte umwandeln rgbImage = image.convert('RGB') # Neues Bild speichern rgbImage.save(outfile) # Originalbild schließen image.close() # Mögliche Fehler von open() und save() abfangen except (IOError, KeyError) as e: print('Fehler beim Lesen oder Schreiben: ') print(e) sys.exit() |
Wir haben nun in unserem Ordner neue Bilddateien im gewünschten Format. Die originalen Dateien sind jedoch noch vorhanden. Um diese zu löschen, verwenden wir eine zweite Schleife. Wieder werden alle Dateien durchlaufen und deren Endung überprüft. Sofern diese dem PNG Format entspricht, wird versucht, die Datei zu löschen. Wie schon beim Speichern, muss auch hier der Benutzer über die notwendigen Rechte verfügen. Ist dies nicht der Fall, wird die entsprechende Ausnahme abgefangen, es werden Fehlermeldung ausgegeben und das Programm beendet.
1 2 3 4 5 6 7 8 9 10 11 12 |
# Originale PNG's löschen for infile in os.listdir(dir_path): # nur PNG Dateien berücksichtigen if infile.endswith(".png"): try: # Datei löschen os.remove(infile) except IOError as e: # Dateilöschung fehlgeschlagen print(infile, " kann nicht gelöscht werden: ") print(e) sys.exit() |
Wir haben mit unserem Skript eine Konvertierung von Dateien im PNG Format ins JPEG Format durchgeführt. Es sollte erwähnt werden, dass das PNG Format keine Transparenz unterstützt. Sollten die Bilder über einen Alpha Kanal verfügen, gehen diese Daten bei der Umwandlung verloren.
Das Beispiel kann mit folgendem Befehl ausgeführt werden:
python3 python_pillow_convert.py
Das komplette Beispiel herunterladen: python_pillow_convert.zip
Hinterlasse jetzt einen Kommentar