Imgp ändert im Batch-Betrieb die Auflösung von Bildern – und das in Windeseile.
Bilder begleiten uns durch den digitalen Alltag, denn sie sagen bekanntlich mehr als tausend Worte. Egal, ob Screenshots, Urlaubsbilder oder Illustrationen in einer Doktorarbeit – wenn sie in großen Mengen auftreten, bedarf es passender Tools, um beim Bearbeiten nicht die Übersicht zu verlieren. Dazu zählt die Stapelverarbeitung Imgp [1].
Bilder im Netz
Angenommen, Sie haben Hunderte oder gar Tausende Fotos, die Sie auf einer Webseite präsentieren wollen. Liegen die Daten in der originalen Auflösung der Kamera vor, würden sie eine damit bestückte Webseite stark verlangsamen oder gar lahmlegen. In jedem Fall spart die hier fällige Optimierung der Bilder Bandbreite im Netz und Platz auf dem Speichermedium.
Wegen der großen Anzahl an Bildern bietet sich hier ein Werkzeug zur Stapelverarbeitung wie Imgp an. Dabei bringt das in Python geschriebene Kommandozeilentool, das früher Imgd hieß, neben Funktionen zum Ändern der Größe von Bildern in den Formaten JPEG und PNG unter anderem auch solche zum Drehen der Aufnahmen.
Das Programm erledigt seinen Job selbst bei Tausenden von Dateien in Windeseile. Das erreichen die Entwickler durch Multi-Core-Verarbeitung sowie den Einsatz eines adaptiven Algorithmus und der Python-Pillow-Bibliothek [2].
Auf Prozessoren, die SIMD (single instruction – multiple data) [3] unterstützen, böte sich als Alternative Pillow-simd [4] an, um das Verarbeiten weiter zu beschleunigen. Die Entwickler geben an, beim Test 8823 Bilder unterschiedlicher Auflösungen mit einer Gesamtgröße von 4,5 GByte auf einer externen Festplatte mit USB-2-Anschluss in rund acht Minuten auf eine Auflösung von 1366 x 1000 Bildpunkten konvertiert zu haben, wobei die resultierende Gesamtgröße auf 897 MByte gesunken ist.
Gute Verbreitung
Die Installation der Software gelingt bei aktuellen Distributionen in den meisten Fällen über das Paketmanagement. Die aktuelle Version 2.8 ist unter anderem in Arch Linux, CentOS, Debian Testing und Unstable, Devuan, Fedora, OpenSuse Leap 15.3 und Ubuntu 21.04 vertreten.
Sollte Ihre Distribution eine ältere Version ausliefern, installieren Sie für DEB- und RPM-basierte Distributionen die entsprechenden Pakete von Github oder bauen das Paket aus dem Quellcode [5]. Voraussetzung ist Python 3.5 oder neuer. Der Terminal-Dateimanager nnn [6], der ebenfalls von Arun Prakash Jana stammt, bietet die Batch-Konvertierung mit Imgp als Skript an. Ein weiteres nützliches Tool vom gleichen Entwickler ist Googler, das bereits in LU 12/2016 Thema war [7].
Die Funktionen von Imgp umfassen die Größenänderung von Bilddateien durch Angabe von Prozentwerten oder Auflösung, Drehen im Uhrzeigersinn um einen frei zu wählenden Winkel, Optimieren von Bildern, um Platz zu sparen, das Umwandeln von PNG in JPEG, das Löschen von Exif-Metadaten und einiges mehr.
Um die Qualitäten von Imgp zu testen, haben wir verschiedene Befehle der Anwendung an 65 mit einem Smartphone aufgenommene Schnappschüsse von einer Reise mit Bildgrößen von rund 2 bis 5 MByte und einer Gesamtgröße von 215,7 MByte ausprobiert. Diese Tests liefen auf einem PC mit Ryzen 7 3700X-CPU mit 32 GByte RAM.
Wenn Sie Imgp ohne weitere Angabe von Parametern eingeben, präsentiert die Anwendung die Hilfeseite, die alle Optionen aufführt, um Bilder in ihrer Größe oder Ausrichtung zu manipulieren. Wie üblich nimmt die Software das derzeitige Verzeichnis als Quelle an sofern Sie nicht eine andere Quelle angeben. Aber Sie können auch mehrere Quellen in einem Befehl abarbeiten (Abbildung 1).

Abbildung 1: Die Hilfeseite erhalten Sie durch Eingabe von imgp ohne weitere Parameter. Die Auswahl zur Manipulation der Bilder umfasst alle gängigen Funktionen.
Rasend schnell
Der einfachste Fall im Test war die Eingabe des Befehls imgp -x 1024x768 im Verzeichnis mit den 65 Dateien. Mit diesen Parametern konvertieren Sie alle Bilder von den verschiedenen Ausgangsauflösungen zu 1024 x 768 Pixeln, ein Vorgang, der im Test 1,29 Sekunden dauerte und die Größe des Ordners von 215,1 MByte auf 8,4 MByte reduzierte. Möchten Sie mehrere Ordner und Dateien auf einmal abarbeiten, könnte der Befehl so aussehen wie in Listing 1 (Abbildung 2).

Abbildung 2: Im einfachsten Fall geben Sie lediglich die gewünschte Auflösung an. Die Software wandelt die Bilder in sehr kurzer Zeit um. Sie könnten statt einer festen Auflösung eine Angabe in Prozent oder nur die Angabe der gewünschten Höhe verwenden.
Listing 1
Auflösung anpassen
imgp -x 1024x768 ~/bilder/bild1 ~/photos/bild2 ~/pictures/
Punkte oder Prozent
Anstatt der Angabe der Auflösung in Bildpunkten dürfen Sie alternativ eine Angabe in Prozent des Ausgangsbilds machen. Der Befehl ändert sich dann zu imgp -x 30, womit Sie alle Bilder auf 30 Prozent der ursprünglichen Auflösung reduzieren. Diese Arbeit erledigte die Software in 1,31 Sekunden und reduzierte so die Größe des Verzeichnisses auf 12,3 MByte.
Anstatt einer festen Auflösung geben Sie alternativ nur die Höhe an, wobei das Tool das Seitenverhältnis des Originals beibehält. Das sieht dann etwa so aus: imgp -x 800x0. Hier sei darauf hingewiesen, dass die Angaben zum Seitenverhältnis auf der Github-Seite des Projekts als horizontal zu vertikal, also mit der Abkürzung “h x v” statt dem sonst üblichen “h x w” für “height x width”.
Befinden Sie sich beim Konvertieren in einem Verzeichnis, das Bilder in den Formaten JPEG oder PNG enthält, verarbeitet das Programm diese, ohne dass Sie es explizit anzugeben brauchen. Die verkleinerten Bilder erhalten die neue Endung _IMGP.jpeg oder _IMGP.png und landen im gleichen Verzeichnis wie das Ausgangsmaterial.
Nehmen Sie statt -x die Option -wx, so löscht die Software die Quelldateien und die konvertierten Bilder tragen den Namen der Originale ohne den Zusatz _IMGP. PNG-Dateien mit Auflösungen kleiner als die Zielauflösung verarbeitet das Programm nur, wenn Sie die Option -n oder --enlarge benutzen. Die Option -f oder --force erzwingt genau die angegebene Wunschauflösung (Abbildung 3).

Abbildung 3: Sie können zum Experimentieren jedes Seitenverhältnis mit der Option -f oder –force erzwingen.
Qualität festlegen
Bereits umgewandelte Dateien berücksichtigt das Tool nicht, es sei denn, Sie nutzen die Option -i oder --includeimgp. Die Ausgabe zu jedem einzelnen behandelten Bild im Terminal unterdrücken Sie mit -m oder --mute. Mit -O oder --optimize reduzieren Sie unter Umständen die Größe der Bilder zum Preis von Qualitätseinbußen und einer längeren Verarbeitungszeit noch weiter.
Bei JPEG geben Sie die gewünschte Qualität mit -q oder --quality an, indem Sie dem Parameter einen Wert von 1 bis 95 mitgeben. Der Befehl aus Listing 2, Zeile 1 sorgt also für eine Qualität von 60, standardmäßig liegt der Wert bei 75. Sie dürfen zudem angeben, dass Sie nur Dateien ab einer bestimmten Größe verarbeiten wollen. Der Befehl aus Listing 2, Zeile 2 verarbeitet nur Dateien, die größer als 50 KiB (51200 Byte) sind.
Listing 2
Qualität ändern
imgp -q 60 -x 1024x768 Bild imgp -x 1024x768 -s 51200
Eine weitere Funktion von Imgp ist das Rotieren im Uhrzeigersinn. Hat ein Bild die falsche Orientierung, so beheben Sie das etwa durch Rotation um 90 Grad mit dem Befehl imgp -o 90 ~/bild.jpg. Das Tool beherrscht mit der Option -c oder --convert zusätzlich das Umwandeln von PNG nach JPEG. Die Option -e oder --eraseexif entfernt die Metadaten der behandelten Bilder.
Mit dem Befehl imgp -ex 1024x768 haben wir getestet, wie viel Platz Sie damit zusätzlich einzusparen. Als Ergebnis erhielten wir ein Verzeichnis mit 6,4 MByte, wogegen es mit Metadaten 8,4 MByte waren. Nicht zuletzt steht zum Lösen von Problemen der Schalter -d oder --debug zur Verfügung, um eine Log-Datei zu erstellen (Abbildung 4 und**5).

Abbildung 5: Die Metadaten, die die Kamera im Exchangeable Image File Format (Exif) im Bild speichert, entfernen Sie mit Imgp wieder.
Fazit
Konversionswerkzeuge wie Imgp gibt es viele, mit und ohne GUI. Alternativen sind etwa ImageMagick, GraphicsMagick oder Converseen. Was an Imgp überzeugt, ist die Geschwindigkeit, mit der das Tool zu Werke geht. So bereiten Sie selbst große Bestände mit Tausenden von Bildern in sehr kurzer Zeit zum Weiterverarbeiten vor, ohne dass Sie auf fortgeschrittene Optionen zu verzichten brauchen. (agr)
Infos
-
SIMD: https://www.itwissen.info/SIMD-single-instruction-multiple-data-SIMD-Rechnerarchitektur.html
-
pillow-simd: https://github.com/uploadcare/pillow-simd
-
Binärpakete: https://github.com/jarun/imgp/releases/tag/v2.8
-
Googler: Ferdinand Thommes, “Ans Ergebnis herantasten”, LU 12/2016, S. 48, https://www.linux-community.de/37781






