Viele Bilder manuell zu bearbeiten erweist sich schnell als Geduldspiel. Mit pfiffigen kleinen Werkzeugen automatisieren Sie solche Arbeiten mühelos.
Ob Urlaub oder Jubiläum: Nicht selten entstehen bei solchen Gelegenheiten viele Bilder, die es zu bearbeiten gilt. Hübsch wäre es, diese Bilderstapel mit überschaubarem Aufwand für das Internet aufzubereiten, ohne dabei jedes Foto einzeln anfassen zu müssen. Als immer wiederkehrende Aufgaben erweisen sich Größenanpassungen, Farbkorrekturen, das Erzeugen von Ausschnitten und Einrahmungen sowie Wasserzeichen für die Autorenkennzeichnung.
Es gibt verschiedene Möglichkeiten, diese identische Schnittfolge zeitnah zu meistern: Entweder mit entsprechender Energie und Geduld, oder durch die geschickte Kombination kleiner Unix-Werkzeuge. Tüftlern stehen auch mächtige Bibliotheken zur Verfügung, um eigene Programme zum Laufen zu bringen.
Tritt ein Umwandlungsprozess wiederholt auf, spart das Automatisierung erheblich Zeit. Das ermöglicht auch komplexere Anpassungen, beispielsweise das Erzeugen eines kleinen Vorschaubildes auf einem Webserver. Welche Möglichkeiten Linux auf der Kommandozeile oder über ein grafisches Werkzeug bietet, zeigen wir im Folgenden.
Auf Kommando
Die Standard-Werkzeugsammlungen für die Bildbearbeitung auf der Kommandozeile heißen Imagemagick [1] und Graphicsmagick [2]. Beide stehen als gleichnamige Pakete in den Repositories aller großen Distributionen zur Installation bereit. Sie enthalten Werkzeuge zum Darstellen, Vergleichen, Kombinieren und Umwandeln von Bilddateien (siehe Tabelle “Imagemagick: Kommandos”). Aktuell unterstützen die Suiten mehr als 80 Bildformate, darunter GIF, JPG, PNG, PDF, TIFF und PNM.
Imagemagick: Kommandos
| Kommando | Funktion |
|---|---|
animate |
animiert eine Bildsequenz auf dem X-Server |
compare |
mathematischer und visueller Bildvergleich |
composite |
Überlappen eines Bildes mit einem anderen |
conjure |
Interpretieren und Ausführen von MSL-Scripts (Magick Scripting Language) |
convert |
Umwandeln zwischen Bildformaten und Bildmodifikation (Ausschnitt erstellen usw.); verändert das Originalbild nicht |
display |
zeigt ein Bild oder eine Bildfolge auf dem X-Server an |
identify |
beschreibt das Bildformat und die Bildcharakteristik von einer oder mehrerer Bilddateien |
import |
erzeugt ein Bildschirmfoto; anwendbar auf den gesamten Bildschirm, ein einzelnes Fenster oder einen beliebigen, rechteckigen Ausschnitt davon |
mogrify |
Bildmodifikation (Skalieren, Ausschnitt erstellen etc.); verändert das Originalbild |
montage |
verbindet einzelne Bilder zu einer neuen Datei. Das Ergebnis kann z.B. auch um einen Rahmen mit dem Namen des Bildes versehen werden. |
stream |
erzeugt einen Datenstrom aus Pixeldaten, etwa zum Speichern auf Datenträger |
Zwar hat Imagemagick einen kommerziellen Hintergrund, steht aber unter einer liberalen, GPL-ähnlichen Lizenz, die den uneingeschränkten Einsatz der Software erlaubt. Graphicsmagic entstand 2002 als Fork von Imagemagick und steht vollständig unter einer MIT-Lizenz. Als Ziele für die Grafik-Suite geben die Entwickler Stabilität, Effizienz und Flexibilität an. Graphicsmagick steht daher sowohl für 32-Bit- als auch 64-Bit-Systeme von Unix, Windows und Mac OS X zum Download bereit. Durch Multithreading und Parallelisierung nutzt die Software die Fähigkeiten aktueller Prozessoren voll aus, wie der Bilddienst Flickr [3] eindrucksvoll demonstriert.
Während Sie jedes Werkzeug von Imagemagick in der Kommandozeile separat aufrufen, stellt Graphicsmagick das stets gleichnamige Kommando gm. Um Programme und Skripte von Imagemagick auf Graphicsmagick umzustellen und dabei möglichst wenig an bestehendem Programmcode zu ändern, hilft das Tool graphicsmagick-imagemagick-compat. Es stellt eine Art Kompatibilitätsmodus bereit, um die Aufrufe zu den einzelnen Programmen aus Imagemagick in die korrekten Aufrufe von Graphicsmagick zu übersetzen. Allerdings fehlen bei Graphicsmagick eine Reihe von Optionen, insbesondere im Bereich der Transformationen und Filter. Ob das ins Gewicht fällt, hängt vom jeweiligen Einzelfall ab.
Zunächst gilt es, die Details einer Bilddatei zu ermitteln (Listing 1). Dabei helfen die Kommandos file, identify aus den beiden Paketen Imagemagick und Graphicsmagick, tiffinfo (libtiff-tools, [4]) und pnginfo (pngtools, [5]) weiter. Während File und Identify nur Angaben zur Größe, zum Farbmodell und zur Farbtiefe anzeigen, liefert Pnginfo deutlich mehr Details – etwa auch das Programm, mit dem die Bilddatei erzeugt wurde, in unserem Beispiel Inkscape (Abbildung 1).
Listing 1
$ file bild.png $ identify bild.png $ gm identify bild.png $ pnginfo bild.png $ tiffinfo bild.tiff

pnginfo zeigt viele Details zum Bild an, die file und identify verschweigen.” width=”300″ height=”194″ />
pnginfo zeigt viele Details zum Bild an, die file und identify verschweigen.Ein Hinweis: Das Universalwerkzeug File funktioniert mit nahezu allen Dateitypen, Identify, Pnginfo und Tiffinfo hingegen nur auf den Bilddateien. Zur einfacheren Auswerten beim Erkennen des Dateityps kommt daher in den nachfolgenden Shellskripten stets File zum Einsatz.
Das Imagemagick-Kommando display öffnet die angegebene Bilddatei und stellt sie in einem separaten Fenster dar, das Sie mit [Esc] schließen. Klicken Sie jedoch mit der Maus in das Fenster, öffnet sich eine Werkzeugleiste zum Bearbeiten des Bilds (Abbildung 2). Diese atmet zwar den Charme vergangener Tage, funktioniert aber tadellos.

display aufrufen.” width=”102″ height=”300″ />
Abbildung 2: Werkzeugleiste von Imagemagick öffnet sich beim Klick ins Bild, das Sie mitdisplay aufrufen. Gemäß des Unix-Prinzips bearbeiten die bisher vorgestellten Werkzeuge pro Aufruf nur eine einzige Datei. Das Umwandeln mehrerer Dateien in ein anderes Bildformat erfordert eine Folge von Aufrufen, die Sie am besten über ein Shellskript realisieren. Listing 2 sucht zunächst mit dem Find-Kommando alle Dateien im aktuellen Verzeichnis heraus. Eine For-Schleife prüft jeden Dateinamen aus der Liste auf die Endung. Das Trennen des Dateinamens in Name und Erweiterung erfolgt mittels Awk [6] anhand des Punkts als Trennzeichen. Endet ein Dateiname auf png, wandelt Convert das Bildformat nach JPEG um.
Listing 2
#!/bin/bash
for bilddatei in `find . -type f -print`
do
# Name und Erweiterung ermitteln und prüfen
bilddatei=`echo $bilddatei | cut -c3-`
dateiname=`echo $bilddatei | awk -F . '{print $(NF-1)}'`
erweiterung=`echo $bilddatei | awk -F . '{print $NF}'`
case "$erweiterung" in
png|PNG)
ausgabeformat="jpg"
ausgabedatei="$dateiname.$ausgabeformat"
echo "Wandle um: $bilddatei nach $ausgabedatei"
convert "$bilddatei" "$ausgabedatei";;
esac
done
Das Skript dient nur als Arbeitsbeispiel, das Sie an Ihre Bedürfnisse anpassen. Es ignoriert beispielsweise alle Dateien ohne Endung, ebenso alle Bilddaten im PNG-Format, die nicht auf png enden. Solche etwas seltsam anmutenden Namensformen kommen aber häufig bei dynamisch erzeugten Bildern auf Webservern vor: Die Bilddaten nutzen eine für Menschen wirr anmutende Zeichenfolge als Endung. Hier hilft es, den tatsächlichen Dateityp zu ermitteln und auszuwerten. Das Skript aus Listing 3 überprüft dafür die Ausgabe des File-Aufrufs, indem es mit Awk das zweite Feld in der Ausgabe extrahiert, das den ermittelten Dateityp enthält. In leicht abgeänderter Form eignen sich die Skripte auch dazu, Bilder anderer Dateitypen zu erkennen oder zu konvertieren.
Listing 3
#!/bin/bash
for bilddatei in `find . -type f -print`
do
# Name und Dateityp ermitteln und prüfen
bilddatei=`echo $bilddatei | cut -c3-`
dateiname="$bilddatei"
dateityp=`file $bilddatei | awk '{print $2}'`
case "$dateityp" in
png|PNG)
ausgabeformat="jpg"
ausgabedatei="$dateiname.$ausgabeformat"
echo "Wandle um: $bilddatei nach $ausgabedatei"
convert "$bilddatei" "$ausgabedatei";;
esac
done
Effekte
Listing 4 versieht Ihre Bilder mit einem erstaunlich echt wirkenden Polaroid-Effekt. Es erzeugt dazu ein maximal 500 Pixel großes Bild mit hellviolettem Rand und schwarzem Hintergrund. In die Aufnahme schreibt es in 12 Punkt Schriftgröße den Dateinamen. Das Bild löst mit 96 dpi auf und sieht damit auch auf größeren Bildschirmen noch gut aus (Abbildung 3).
Listing 4
$ convert -size 500x500 bild.jpg -thumbnail 500x500 -set caption '%t' -bordercolor Lavender -background black -pointsize 12 -density 96x96 +polaroid -resize 50% polaroid.png

Abbildung 3: Ein Kommandozeilenaufruf reicht, um ein gewöhnliches Bild in eine Pseudo-Polaroid-Aufnahme zu verwandeln.
Daneben eignet sich Convert auch dazu, Bilder mit einem Rahmen zu versehen. Als Parameter benötigen der Befehl die Farbe und Breite des Rahmens, die Sie mit -mattecolor und -frame festlegen. Für einen einfachen, schwarzen Rahmen mit einer Breite von 5 Pixeln für alle Kanten verwenden Sie das Kommando
$ convert -mattecolor black -frame 5x5 bild.png bild-gerahmt.png
Die Farben geben Sie entweder als RGB-Farbcode mit und ohne Alphakanal oder als Namen an. Die Benennung für Schwarz lautet black, alternativ rgb(0,0,0) oder #000. Eine vollständige Liste der möglichen Farbwerte mit den entsprechenden Farbanteilen in hexadezimaler Schreibweise zeigt das Kommando convert -list color (Abbildung 4). Die linke Spalte enthält die Farbbezeichnung, die mittlere die Farbanteile als Dezimalwert zwischen 0 und 255. Die rechte Spalte gibt das definierte Bildformat des Farbwerts an.
Die Anzahl der Pixel legt die Rahmenbreite (-frame) fest. 5x5 definiert gleichmäßig 5 Pixel für Höhe und Breite. Damit der Rahmen dreidimensional erscheint, ergänzen Sie die Angabe um +2+2. Je größer die beiden Werte ausfallen, desto stärker wirkt die Schattierung (Abbildung 5). Der komplette Befehl lautet:
$ convert -mattecolor black -frame 5x5+2+2 bild.png bild-gerahmt.png

Abbildung 5: Imagemagick rahmt Ihre Bilder beliebig ein, und sorgt mit einer Schattierung darüber hinaus für einen 3D-Effekt.
Bei größeren Abbildungen fällt ein Rahmen mit einer Breite von 5 Pixeln nicht besonders auf. Um ihn deutlicher hervorzuheben, experimentieren Sie ein wenig mit der Rahmenbreite und der Schattenangabe. Die Erfahrung zeigt, dass bei einer Bildgröße von rund 2000 x 1500 Pixeln eine Rahmenbreite von 20 Pixeln und ein Schattenwert von 8 Pixeln passable Ergebnisse erzielt.
Alle bisherigen Bildtransformationen erzeugten stets eine Kopie des Originals. Möchten Sie Originaldaten verändern, ersetzen Sie den Aufruf convert durch mogrify, der die identischen Parameter verwendet.
Vorschaubilder erzeugen
Benötigen Sie verkleinerte Vorschaubilder Ihrer Aufnahmen, dann starten Sie Imagemagick oder Graphicsmagick mit dem Parameter -resize. Die Aufrufe aus Listing 5 erzeugen Bilder mit einer maximalen Breite von 100 Pixel. Das Kommando behält das Seitenverhältnis des Originalbildes bei und rechnet die Höhe des Vorschaubildes entsprechend um.
Listing 5
$ convert -resize 100x100 bild1.jpg thumb1.jpg $ gm convert -resize 100x100 bild2.jpg thumb2.jpg
Es fallen zwei signifikante Unterschiede zwischen den beiden Werkzeugen auf: erstens in der Dateigröße der erzeugten Vorschaubilder, zweitens hinsichtlich der Verarbeitungszeit. Imagemagick erzeugt bei gleicher Auflösung und Bildgröße wesentlich größere Dateien als Graphicsmagick und benötigt dafür auch ein Viertel bis ein Drittel mehr Zeit. Einen Einfluss auf die Bildqualität lässt sich aber nicht feststellen.
Ausblick
Der Artikel zeigt einen kleinen Einblick, welche Möglichkeiten der Bildbearbeitung die Tools für die Kommandozeile bieten. Sie bringen gut dokumentierte Bibliotheken mit, die sich auch zum Ansteuern mit Skripten eignen. Teil 2 der Reihe zeigt Ihnen, welches Potenzial diese Bibliotheken enthalten und wie Sie diese einsetzen.
Infos
[1] Imagemagick: http://www.imagemagick.org
[2] Graphicsmagick: http://www.graphicsmagick.org
[3] Graphicsmagick bei Flickr: John Allspaw, “Operational Efficiency Hacks”, http://www.kitchensoap.com/2009/04/03/slides-from-web20-expo-2009-and-somethin-else-interestin/
[4] Libtiff: http://libtiff.maptools.org
[5] Pngtools: http://www.stillhq.com/pngtools
[6] Awk-Workshop: Stefan Lagotzki, “Ein Tool für alle Fälle”, LU 10/2005, S. 88, https://www.linux-community.de/9036







Das Tutorial ist gut gemacht, man kann wenn man denn masochistisch veranlagt ist, viel damit machen (also mit Kommandozeile und den entsprechenden Werkzeugen…) Für Bildkonvertierung / – Bearbeitung von bspw. mehr als 5 Bildern in einem Verzeichnis fürs Web (dabei Thumbs erstellen, die Thumbs mit Rundeckenrahmen bspw. und Schatten, definierter Leinwandfarbe usw.) gibts allerdings auch ein etwas recht intuitives und “zeitgemäß” mit der Maus zu bedienendes Werkzeug – nämlich PHATCH. Infos zum Programm unter http://photobatch.wikidot.com/ das Programm selbst kann unter http://photobatch.stani.be/ donwgeloadet werden. Ich finde diese Tool einfach genial – Photo Batch Editor – genau das macht es. 500 Bilder… Mehr »
Hi R.H.,
Phatch hat LinuxUser bereits im Foto-Schwerpunkt in Ausgabe 09/2010 ausführlich vorgestellt. Der Artikel findet sich unter https://www.linux-community.de/21720 (frei zugänglich).
Gruß,
Jörg
Hallo R. H.,
vielen Dank für deinen Hinweis. Phatch ist sehr praktisch. Gern weise ich dieses Tool nochmal hin.
Die Idee zum Beitrag ist, hinter die die Kulissen zu schauen. Das hilft zu verstehen, warum Klick-Programme funktionieren :)
Beste Grüße,
Frank