AA_PO-22368-123RF-altomedia.jpg

© Altomedia, 123RF

Bilder im Griff

Bildbearbeitung mit ImageMagick

19.07.2012
Wer nicht 1000 Urlaubsbilder von Hand skalieren, normieren, beschneiden oder mit Wasserzeichen versehen möchte, für den führt kein Weg an der Werkzeugsammlung ImageMagick vorbei.

ImageMagick zählt zu den absoluten Dauerbrennern der Open-Source-Szene: Der Grafik-Werkzeugkasten für die Kommandozeile wird sei 1999 kontinuierlich weiter entwickelt und trägt aktuell die Versionsnummer 6.7.7. An der grundsätzlichen Handhabung hat sich über die Jahre kaum etwas geändert, allerdings kommen von Version zu Version neu unterstützte Bildformate, Funktionen oder Programmierschnittstellen hinzu.

Es besteht nur selten ein Anlass, die aktuellste Version von der Projektseite [1] herunter zu laden und aus den Quellen [2] zu übersetzen, weil alle wichtigen Distributionen das Paket bereits mitbringen, Ubuntu 12.04 etwa in der Version 6.6.9.7.

Magisches Universum

ImageMagick gibt es nicht nur für Linux, sondern auch für Windows, Mac OS X und iOS. Zudem existieren diverse Programmierschnittstellen, darunter die C-Core-API Magick Core [3], ein objektorientiertes C++-API namens Magick++ sowie das Perl-Interface PerlMagick, sodass sich Bilder auch dynamisch generieren lassen. Daher setzen selbst Web-Anwendungen häufig auf ImageMagick.

ImageMagick besteht aus einer Reihe von einzelnen Werkzeugen zur Bildmanipulation [4], derzeit elf an der Zahl, von denen convert das bekannteste und am meisten benutzte sein dürfte. Der gemeinsame Nenner aller ImageMagick-Tools besteht darin, dass alle auf das gleiche Fundament an Basis-Bibliotheken zurückgreifen, die unter anderem das Lesen und Schreiben der inzwischen knapp 100 unterstützen Dateiformate ermöglichen. Die Basis-Bibliotheken zeichnen auch für zahlreiche andere grafische Basis-Operationen verantwortlich.

Die eigentliche Mächtigkeit der Tool-Sammlung liegt – abgesehen von den erwähnten Programmierschnittstellen – aber vor allem in der Vielzahl möglicher Operatoren begründet. Dabei stützen sich die Beispiele aus dem Bereich Automatisierung selbstverständlich in erster Linie auf die Fähigkeiten der Bash. Da alle ImageMagick-Tools kommandozeilenorientiert arbeiten, lassen Sie sich auch in vielfältiger Weise verknüpfen.

Das mit Abstand populärste Tool aus der ImageMagick-Sammlung heißt Convert. Viele Nutzer betrachten es irrtümlich als eigenständiges Werkzeug oder gar Linux-Bordgepäck, weil viele Distributionen ImageMagick bereits vorinstallieren. Findet sich Convert auf Ihrem Rechner nicht, installieren sie erst einmal via Paketverwaltung ImageMagick.

Convert kann jedes der unterstützen Dateiformate ineinander konvertieren und außerdem jedes Bild skalieren, beschneiden, beschriften oder in sonst irgendeiner Form transformieren: Es ist also der eigentliche Bildbearbeiter im Reigen der ImageMagick-Tools. Der Einsatz von Convert funktioniert wie bei fast allen Werkzeugen nach dem Schema

$ Befehl Ursprungsbild [Optionen] Ergebnisbild

Dabei erlauben fast alle ImageMagick-Tools statt der Angabe eines Ergebnisbilds auch den Parameter x:, womit das Resultat der Verarbeitung quasi als Preview direkt auf der X11-Oberfläche in einem Viewer erscheint, statt in einer Datei zu landen (Abbildung 1).

Abbildung 1: ImageMagick kann Ergebnisse auch testweise lediglich auf der X11-Oberfläche anzeigen.

ImageMagick-Tools

Name Funktion
animate spielt eine Serie von Bildern schnell hintereinander ab
convert Bilder einlesen, bearbeiten und speichern
compare vergleicht zwei Bilder und schreibt die Unterschiede in eine Bilddatei
composite fügt mehrere Bilder zu einem Bild zusammen
conjure führt Skripte in der Skriptsprache von ImageMagick aus
display stellt ein Bild auf einem X11-Server dar
identify zeigt Dateiformat, Bildgröße und weitere Bildparameter an
import erzeugt Bildschirmfotos
montage fügt mehrere Bilder zusammen
mogrify funktioniert wie Convert, ersetzt aber das Ursprungsbild durch das Ergebnis
stream liest Teile aus Bilddateien aus, um sie etwa als Rohdaten auszugeben

Convert

Der einfachste Anwendungsfall für Convert besteht im Umwandeln des Eingangsformats in eines der unterstützen Ausgangsformate mittels

$ convert bild-alt.jpg bild-neu.png

Die zu verwendenden Grafikformate erkennt Convert anhand der Dateiendung selbstständig. Bei der Gelegenheit ist es ein Leichtes, gleich die Größe des Ziel-Bildes zu verändern, sei es um Thumbnails für eine Web-Galerie zu erzeugen oder Fotos aus verschiedenen Kameras in unterschiedlichen Ausgangsgrößen zu normieren. Convert kennt dazu den Parameter -resize. Er akzeptiert sowohl absolute Größenangaben in Pixeln (-resize 320x240) als auch relative Größenangaben in Prozent (-resize 20%).

Es gilt zu beachten, dass Sie auf diesem Weg zwar eine Zielgröße angeben dürfen, Convert aber ohne weitere Anweisungen stets das Seitenverhältnis des Ursprungsbilds beibehält. Versuchen Sie beispielsweise, einen Laptop-Screenshot von WXGA+ (1440x900) auf XGA (1024x768) herunterzurechnen, führt das entsprechende Kommando

$ convert wxga.jpg -resize 1024x768 xga.jpg

dazu, dass xga.jpg keineswegs das angegebene Zielformat aufweist, sondern vielmehr eine Größe von 1024 mal 640 Pixeln – im selben Seitenverhältnis wie das Ausgangsbild.

Sie können -resize allerdings durch Angabe eines Ausrufezeichens hinter der Größenangabe (-resize 320x240!) auch zwingen, die angegebene Skalierung vorzunehmen. Daraus resultieren je nach Formfaktor des Ursprungsbilds mehr oder minder starke Verzerrungen im Ergebnis.

Beschneiden mit Convert

Zum Beschneiden von Bildern verwendet Convert den Parameter -crop, gefolgt von einer Größenangabe, die sich aus der Ausschnittsgröße und der Startposition zusammensetzt. So führt beispielsweise der Befehl:

$ convert bild-alt.jpg -crop 500x300+0+0 bild-neu.jpg

dazu, dass Convert aus dem Ursprungsbild eine Auswahl von 500 Punkten nach rechts und 300 Punkten nach unten ausschneidet und dabei an der Postion 0/0 beginnt, was der linken oberen Ecke des Bilds entspricht (Abbildung 2). Dagegen schneidet das Kommando:

$ convert bild-alt.jpg -crop 500x300+300+100 bild-neu.jpg

erst 300 Bildpunkte rechts und 100 Bildpunkte unterhalb der linken oberen Bildecke eine Auswahl von 500 mal 300 Punkten aus (Abbildung 3).

Abbildung 2: Das Beschneiden von Bildern gehört zu den leichtesten Übungen von Convert.
Abbildung 3: Jeder Ausschnitt lässt sich durch Angeben von Offsets an einer beliebigen Stelle im Bild platzieren.

Der Parameter -crop weist noch einige Besonderheiten auf. Lassen Sie beispielsweise die Positionsangabe weg, erzeugt er so viele durchnummerierte Ergebnisbilder, wie mit dem vorgegebenen Ausschnitt in X- und Y-Richtung ins Originalbild passen (Abbildung 4).

Abbildung 4: Mit -crop können Sie ein Bild auch in mehrere Teile zerlegen.

Die Option -gravity erlaubt, den Ursprung zur Berechnung des Offsets zu verschieben. Als Vorgabe fungiert dabei 0/0 (oben links), daneben gibt es die Angaben NorthWest, North, NorthEast, West, Center, East, SouthWest, South sowie SouthEast. Der Befehl:

$ convert bild-alt.jpg -gravity Center -crop 50%+0+0 bild-neu.jpg

ließe sich beispielsweise dazu einsetzen, das Resultat aus Abbildung 5 zu erzielen.

Abbildung 5: Mit der Option -gravity verschieben Sie den Ursprung für einen Bildausschnitt.

Der Vollständigkeit halber sei noch die Option +repage erwähnt, die Sie korrekterweise noch anfügen müssen, weil sonst beim Beschneiden mit -crop die Werte für canvas und offset im Header des Bildes falsch erhalten bleiben.

Selbstverständlich können Sie die oben gezeigte Formatumwandlung sowie das Skalieren und Beschneiden, wie alle Convert-Optionen, auch in einem Befehl kombinieren.

Stapelverarbeitung

Möchten Sie die genannten Operationen auf 100 oder mehr Fotos anwenden, kommen die Fähigkeiten der Shell ins Spiel. Im folgenden Beispiel schreiben wir die verkleinerten Ausgangsbilder in einen zuvor angelegten separaten Ordner (fotos-small/), damit die Originalbilder erhalten bleiben. Das Szenario lässt sich wahlweise mit eine For- oder While-Schleife umsetzen:

$ for i in .jpg; do convert $i -resize 1280x960 -gravity SouthWest -crop 1024x768+0+0 +repage fotos-small/$i; done

Das Kombinieren von -resize, -crop und -gravity bietet sich insbesondere dann an, wenn Sie eine große Anzahl von Bildern etwa für einen Web-Katalog normieren müssen. In einem Szenario aus dem Bereich Produktmanagement sah sich der Autor beispielsweise mit der Situation konfrontiert, Produktbilder eines Fahrradherstellers für einen Online-Katalog in ein einheitliches Format zu bringen, wobei die vom Hersteller gelieferten Bilder nicht durchgängig das gleiche Format besaßen. Außerdem war beim Fotografieren nicht immer der gleich Ausschnitt und die gleiche Perspektive gewählt worden. Die Ausgangsbilder sollten am Ende ausnahmslos über einen Rand verfügen, damit sie sich sich optisch gut in das Layout des Katalogs einfügten.

Als Lösung wurden die Bilder zunächst mit -resize in ein einheitliches Format gebracht, das geringfügig größer als das Zielformat ausfiel. Nach Festlegen eines neuen Koordinatenursprungs (links unten) mit -gravity entstand durch Anwenden von -crop eine Auswahl, die in X- und Y-Richtung 10++Pixel unter dem Zielformat lag. Anschließend erhielten alle Bilder mit convert -bordercolor white -border 5 einen umlaufenden weißen Rand von 5 Pixeln.

Drehen und Spiegeln

Selbstverständlich kann Convert Bilder auch in vielfältiger Weise transformieren. Zum Drehen eines Bildes kommt beispielsweise -rotate n zum Einsatz, wobei n den Drehwinkel in Grad angibt (Abbildung 6). Geben Sie einen negativen Wert für den Winkel vor, rotiert Convert das Bild gegen den Uhrzeigersinn.

Abbildung 6: Das Drehen eines Bildes gehört zu den leichteren Übungen für Convert.

Als nützlich erweisen sich in diesem Zusammenhang oft die Operatoren < und >, die häufig in Skripten Verwendung finden. Stellen Sie der Winkelangabe ein < voran, dreht Convert das Bild nur dann, wenn es in einem Hochformat vorliegt; bei > nur, falls es querformatig ist.

Convert kann Bilder auch problemlos spiegeln (Abbildung 7) und bietet dazu die vier Varianten waagerecht (-flip), senkrecht ( -flop), diagonal links oben/rechts unten (-transpose) und diagonal rechts oben/links unten (-transverse) an.

Abbildung 7: Das Spiegeln gehört ebenfalls zu den eher trivialen Operationen.

Weitere Optionen

Neben den bereits vorgestellten, wohl am häufigsten eingesetzten Optionen kennt ImageMagick noch Hunderte weitere [5]. Ein paar Beispiele sollen im Folgenden die mögliche Bandbreite des Werkzeugkastens aufzeigen.

So streckt etwa die Option -normalize das Histogramm des Bilds mit dem Ergebnis, dass Weiß die hellste und Schwarz die dunkelste Farbe ist, was in vielen Fällen zur einer Verbesserung führt. Mit dem Befehl:

$ convert bild-ein.jpg -fx u*(1+j/h)*0.85 x:

betonen Sie beispielsweise die helleren Bildteile (Abbildung 9). Das Bild verliert dabei zwar etwas an Kontrast, das lässt sich aber mit -normalize umgehend wieder korrigieren.

Abbildung 8: Convert lässt auch das Anwenden von komplexen Filtern zu, die ihre mathematische Natur in ImageMagick schonungsloser offenbaren als etwa in Gimp.

Sie ahnen sicher bereits, dass der Operator -fx nicht für das Aufhellen oder Abdunkeln eines Bildes steht. Vielmehr handelt es sich um den Special-Effects-Operator von ImageMagick. Er erwartet als Argument einen mehr oder weniger komplexen mathematischen Ausdruck. Mit Hilfe von -fx können Sie beispielsweise auch Gradienten erzeugen, Farbwerte zwischen Bild und Farbkanälen austauschen, Farben in komplexer Weise mischen und vieles mehr.

Zum Generieren eines passenden Ausdrucks stehen an die hundert Operatoren der Fx Expression Language zur Verfügung [6]. Im Netz finden sich etliche Beispiele zum direkten Verwenden, das Verständnis der Wirkungsweise komplexer Formeln zur Bildmanipulation erfordert allerdings mathematisches Grundlagenwissen zur elektronischen Bildbearbeitung.

Convert kann darüber hinaus auch Gamma-Werte manipulieren: Mit convert -gamma 1.10,1.05,1.0 verstärken Sie beispielsweise den Rot- und den und Grün-Anteil und machen ein Bild damit wärmer (Abbildung 9).

Abbildung 9: Mit Convert lassen sich auch Gamma-Korrekturen vornehmen.

Wasserzeichen

Um mit Convert Bildern mit wenigen Handgriffen ein Wasserzeichen hinzuzufügen, benötigen Sie lediglich die Optionen -font, -fill und -draw. Schriftart sowie Größe und Farbe des Texts legen Sie nach Belieben fest:

$ convert bild-ein.jpg -font Ubuntu -pointsize 30 -fill gray -draw "text 200,100 'Copyright by Drilling'" bild-aus.png

Dabei weist "text 200,100 'Copyright by Drilling'" den Operator -draw an, den angegeben Text an der Position 200,100 (ausgehend von der linken oberen Bildecke) auszugeben (Abbildung 10).

Abbildung 10: Mit Convert schreiben Sie mit wenigen Handgriffen ein Wasserzeichen in Ihre Bilder.

Convert komprimiert die Bilder auf Wunsch außerdem mit -compress Typ für verschiedene Anwendungszwecke. Zur Verfügung stehen die Kompressionstypen None, BZip, Fax Group4, JPEG, JPEG2000, Lossless, LZW, RLE und Zip.

Filter einsetzen

ImageMagick kennt zahlreiche Filter, mit deren Hilfe Sie mehr oder weniger nützliche Effekte auf die Bilder anwenden. Eine Liste dieser Filter inklusive Syntax finden Sie in der bereits erwähnten Operatoren- und Parameter-Liste [5] auf der ImageMagick-Website. Zu den Standard-Effekte zählt -sharpen zum Schärfen eines Bildes, der als Argument wahlweise eine einfache Radius-Funktion akzeptiert oder einen komplexen Gaußschen Operator (Abbildung 11).

Abbildung 11: Zum Schärfen eines Bildes setzen Sie den Operator -sharpen ein.

In ähnlicher Weise funktioniert der Blur-Effekt, der Schärfe aus einen Bild heraus nimmt, indem er den Hintergrund verwischt (Abbildung 12).

Abbildung 12: Die Wirkungsweise des Blur-Effektes lässt sich am besten mit "Verwischen" umschreiben.

Möchten Sie den Kontrast eines Bildes erhöhen, erledigen Sie das wahlweise für jeden einzelnen Kanäle Rot, Grün, Blau und Alpha getrennt oder in einem Rutsch für alle vier Kanäle mithilfe des Parameters -contrast-stretch (Abbildung 13).

Abbildung 13: Das Erhöhen des Kontrastes gelingt wahlweise für alle oder jeden einzelnen Farbkanal.

Wer bin ich?

Convert ist nur eines von elf Werkzeugen des ImageMagick-Paketes – wenn auch mit Abstand das Wichtigste, was die eigentliche Bildbearbeitung angeht. Als besonders nützlich erweist sich aber immer wieder auch das Tool Identify, mit dessen Hilfe Sie ohne großen Aufwand jedem Bild wichtige Parameter entlocken.

So liefert etwa indentify *.jpg Informationen zu Breite, Höhe, Farbtiefe und Dateigröße jedes JPEG-Bilds im aktuellen Verzeichnis. Jede Zeile der Ausgabe beschreibt bei dieser Kurzform genau ein Bild. Die Auskunftsfreudigkeit von identify lässt sich aber über den Parameter -verbose erhöhen und entlockt dem Bild dann unter anderem auch Exif-Werte (Abbildung 14).

Abbildung 14: Mit Identify entlocken Sie jedem Bild seine elementaren Parameter.

Fazit

ImageMagick zählt zweifelsohne zu den nützlichsten Tool-Paketen unter Linux überhaupt. Die Leistungsfähigkeit der einzelnen Funktionen braucht sich hinter jener von Werkzeugen wie Gimp nicht zu verstecken. Die elf Komponenten der Suite basieren alle auf den gleichen Bibliotheken, verwenden das selbe Syntax-Schema und lassen sich nahtlos miteinander kombinieren. Dazu gibt es hunderte von Operatoren und eine eigene Formelsprache. Dabei beschränkt sich ImageMagick nicht nur auf einfache Filter, sondern kann beispielsweise auch Morph-Effekte auf Bildserien anwenden.

Allerdings erfordern zahlreiche Funktionen, insbesondere Filter und Effekte, fundiertes Grundlagenwissen der Mathematik zur Bildbearbeitung, um beim Anwenden von Effekten nicht auf bloßes Herumprobieren angewiesen zu sein. Das gilt aber ebenso für grafische Programme des Kalibers von Adobe Photoshop oder Gimp, auch wenn sie die jeweiligen Funktionen in eine hübsche GUI verpacken.

Die meisten Anwender nutzen ImageMagick aber eher für einfache Dinge, wie Normierungen oder Formatumwandlungen, denn hierbei ermöglicht die durchgängig verfügbare Kommandoschnittstelle ein automatisiertes Verarbeiten auf der Shell oder in Skripten. Auch Web-Dienstleister nutzen oft die ImageMagick-Tools – etwa, wenn sie etwa Ihren Kunden eine Upload-Funktion für Bilder anbieten. Hinsichtlich der ungeheuren Flexibilität der Werkzeugsammlung gibt es nichts, was sich mit ImageMagick messen könnte. 

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 6 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare