Vom Konvertieren von Negativen bis hin zum PDF fürs Fotobuch – mit ImageMagick und ein paar Zeilen Shell-Code meistern Sie jede Aufgaben ruck, zuck auf der Kommandozeile.
Einfache Anwendungen von ImageMagick, wie etwa das Verkleinern eines Bilds, gehören zu den Aufwärmübungen. Die Software leistet aber sehr viel mehr: Sie unterstützt selbst komplexeste Funktionen zum Bearbeiten von Bildern. Einmal in ImageMagick eingearbeitet, gehen die einzelnen Aktionen zügig von der Hand. Das ImageMagick-Paket besteht aus einer ganzen Reihe von Befehlen, deren mächtigster Convert ist – um eben diesen dreht sich dieser Beitrag im Wesentlichen.
Kein Unix-Befehl
Convert wie die anderen ImageMagick-Befehle folgen nicht den Unix-Konventionen. Das folgende Beispiel anhand des Cp-Befehls verdeutlicht das:
$ cp -va Quelle Ziel
Hier übergibt der Anwender dem Befehl die beiden Optionen -v und -a sowie die beiden Argumente Quelle und Ziel. Unix-typisch zieht jeder tippfaule Benutzer dabei die beiden Optionen zusammen. Optionen kommen immer vor den Argumenten, neben den Kurzoptionen, die aus einem Buchstaben bestehen, gibt es noch Langoptionen, die Sie mit zwei Minuszeichen einleiten (--verbose --archive).
Bei ImageMagick läuft das anders: Hier übergeben Sie dem jeweiligen Befehl ein Art Programm. Zum Glück ist die Programmiersprache sehr einfach aufgebaut, außer Klammern gibt es nur Einstellungen (im englischen Original “options”) und Funktionen (“operators”).
Selbst Dateinamen auf der Kommandozeile sind nur spezielle Funktionen: Sie laden Dateien in den ImageMagick-Speicher oder schreiben Dateien auf Platte. Optionen und Operatoren fangen jeweils mit einem Minus- oder Pluszeichen an.
Das Programm darf sehr lang sein; eine Grenze setzt nur der Linux-Kernel. Er setzt die Obergrenze für die Gesamtzahl aller Umgebungsvariablen und Argumente für die Kommandozeile auf ein Viertel der aktuellen Stack-Größe (ulimit -s). Im Normalfall verursacht das jedoch keine Probleme: Ein funktionierendes Convert-Programm mit mehr als 5000 Zeichen leistet beispielsweise beim Autor gute Dienste.
ImageMagick-Programme
Listing 1 zeigt jedoch zum Einstieg erst einmal ein einfaches Beispiel. In Zeile 3 übergibt das Skript zwei Optionen an Convert. Jede Option ändert eine Einstellungen. Prinzipiell dürfen die diese an beliebiger Stelle stehen, sie wirken immer sofort.
Listing 1
#!/bin/bash convert -size 600x400 \ -set filename:f '%t-web.%e' \ "$@" \ -resize 600x400 -auto-orient -unsharp 0x1 \ +adjoin '%[filename:f]'
Bei der ersten Option handelt es sich um einen Hinweis auf die gewünschte Größe, der zum Beispiel in die JPG-Routinen beim Optimieren einfließt. Die zweite Option setzt ein Template für die Namen der Ausgabedateien. Die fünfte Zeile übergibt alle Argumente (in diesem Fall Dateinamen) an Convert, und das Programm lädt diese in den Speicher. Anschließend folgen in Zeile 6 drei Funktionen, die Convert in genau der angegebenen Reihenfolge auf alle geladenen Bilder anwendet (Ändern der Größe, Rotieren, Schärfen).
Die letzte Zeile benennt den Namen der Ausgabedatei. Dafür wertet das Programm die vorher gesetzte Filename-Option aus und erzeugt für alle Bilder im Speicher die entsprechende Datei. Die Option "+adjoin" verhindert dabei, dass Convert alle Bilder in einem Sammelbild zusammenfasst (TIFFs oder GIFs dürfen beispielsweise mehrere Bilder enthalten).
Der Convert-Befehl wandelt also auf einen Schlag viele Bilder um und nutzt dabei sogar mehrere Prozessoren. Viele Anwender bemühen für ein solches Szenario jedoch einfache Skripte oder sogar Perl-Programme mit einem Aufruf pro Datei. Das hat zur Folge, dass die Programm die Bilder linear Bearbeiten, was entsprechend länger dauert.
Die folgenden Abschnitte zeigen ein paar Anwendungsfälle für komplexere ImageMagick-Programme. Zu den verwendeten ImageMagick-Funktionen und Optionen helfen Beschreibungen auf der Website ([1],[2]) weiter.
Negative konvertieren
Wer Negative digitalisieren möchte, kämpft unter Linux mit zwei Problemen: Einmal kommt das System mit Filmscannern nur begrenzt zurecht. Viele unterstützte Flachbett-Scanner besitzen zwar eine Durchlichteinheit, doch selbst in so einem glücklichen Fall kennen dann die üblichen Scan-Programme wieder nur wenige Negativsorten.
Zum Glück bereitet ImageMagick das Umwandeln von Negativen kein Problem. Es verfügt für diesen Zweck die Funktion -negate. Allerdings haben Farbnegative aus technischen Gründen eine orangene Farbmaske, weshalb ein einfaches Anwenden der Option nicht zum gewünschten Ergebnis führt (Abbildung 1).

-negate führt deshalb zu einem starken Farbstich (rechts).” width=”129″ height=”300″ />
Abbildung 1: Filmnegative haben aus technischen Gründen eine orangene Maske (links). Das Umwandeln mit der Option-negate führt deshalb zu einem starken Farbstich (rechts).Das ImageMagick-Programm muss also vor dem Invertieren die Maske herausrechnen. Dazu benötigen Sie zuerst den genauen Farbwert der Maske. Dies geht am einfachsten mit Gimp. Dazu laden Sie ein leeres Negativ (zum Beispiel vom Anfang des Films) oder schneiden einen Steg zwischen zwei Bildern aus und scannen diesen. Die Histogramm-Ansicht zeigt dann für jeden Kanal den durchschnittlichen Farbwert (Abbildung 2). Alternativ erledigen Sie diese Aufgabe mit ImageMagick:
$ identify -verbose steg.tif | grep -iE -A 4 "Red|Green|Blue"

Abbildung 2: Die Werte für die Durchschnittswerte der Farben bestimmen Sie anhand des Histogramms in Gimp.
Dieser Schritt ist für jeden Filmtyp nur einmalig notwendig. Anschließend kommt das Programm aus Listing 2 zum Einsatz. Zeile 18 lädt die Eingabedatei. Zeile 19 klont das eingelesene Bild, setzt die Füllfarbe über die Option -fill und färbt den Klon mit der Funktion -colorize zu 100 Prozent ein. Die Klammern bewirken, dass das Programm nur den Klon koloriert, nicht etwa das Original. Die Backslashes vor den Klammern verhindern, dass die Bash die Klammern interpretiert und so den Ablauf ändert. Anschließend invertiert ImageMagick die Maske. Damit haben Sie jetzt das Original und eine gleichgroße Maske im Bildspeicher von ImageMagick.
Listing 2
#!/bin/bash
inFile="$1" # Eingabedatei
outFile="$2" # Ausgabedatei
nr="${3:-0}" # Nummer der Umwandlungsmethode (optional, default: 0)
method0="-noop"
method1="-equalize"
method2="-colorspace HSL -channel lightness -equalize -colorspace RGB"
method3="-normalize"
method4="-channel all -normalize +channel -normalize"
methodName="method$nr"
methodCmds="${!methodName}" # Inhalt der Variable methodName
maskColor="rgb(188,126,101)"
convert "$inFile" \
\( -clone 0 -fill "$maskColor" -colorize 100% -negate \) \
-compose plus -composite \
-negate \
$methodCmds \
"$outFile"
Die Zeile 20 überlagert jetzt die invertierte Maske mit dem Original und zieht sie somit ab. Dabei ist -compose wieder eine Option, und -composite die eigentliche Funktion. Die Optionen dürften auch am Anfang der Kommandozeile stehen, aber direkt vor der dazugehörigen Funktion erleichtern sie das Verständnis des Programms. Letztendlich wandelt das Programm in Zeile 21 dann die Daten in ein Positiv um.
Effizienter (aber erst einmal weniger verständlich) wäre es, das Bild direkt mittels -compose minus umzuwandeln, anstatt sowohl Maske als auch Überlagerung zu invertieren. Das Ergebnis der Operationen ist in jedem Fall etwas flau. Um es zu optimieren, stehen verschiedene Möglichkeiten zur Wahl: Das Skript aus Listing 2 nimmt einen optionalen Parameter entgegen, der die Umwandlungsmethode (Zeilen 7 bis 11) auswählt.
Jede der Methoden führt zu einem anderen Ergebnis (Abbildung 3), einen klaren Gewinner gibt es nicht. Wer das Ergebnis fein abstimmen will, nutzt Gimp für ein Beispielbild und dann die Technik des nächsten Abschnitts, um das Ergebnis auf alle ähnlichen Bilder zu übertragen.
Im Duett
Während ImageMagick beim automatische Konvertieren vieler Dateien seine Stärken ausspielt, glänzt Gimp beim individuellen Bearbeiten von Bildern. Bei Bedarf verbinden Sie das Beste aus beiden Welten: Zuerst bearbeiten Sie das Bild innerhalb von Gimp nach allen Regeln der Kunst.
Wollen Sie das Ergebnis auf viele Bilder übertragen, gilt es sich auf solche Werkzeuge zu beschränken, die lediglich Tonwerte ändern und nicht etwa strukturelle Änderungen vornehmen. Tabu sind also Stempel zum Klonen, Modifikationen der Perspektive oder Schärfen. Alle diese Operationen müssen Sie individuell auf das Bild abstimmen, zum Übertragen eignen sie sich nicht.
Wichtig beim gesamten Vorgehen: Notieren Sie penibel jeden Schritt. Bei manchen Tools, wie etwa dem Kurvenwerkzeug, speichert Gimp die Kurven inzwischen mit Zeitstempel automatisch. Als Nächstes erzeugen Sie ein so genanntes CLUT-Bild. Dafür bietet sich ein verlustfreies Format wie PNG oder TIF an:
$ convert hald:8 hald-clut.png
Das CLUT-Bild bearbeiten Sie anschließend genauso in Gimp wie das Beispielbild (Abbildung 4). Technisch gesehen enthält jedes Pixel des CLUT-Bildes einen Farbwert aus der Farbtabelle des Systems. Das Bearbeiten mit Gimp verändert die Werte, und per ImageMagick übertragen Sie jetzt diese Änderungen auf andere Bilder:
$ convert Eingabedatei hald-clut.png -hald-clut Ausgabedatei
Mehrere Bilder setzen Sie automatisch mit der aus Listing 1 bekannten Methode (-set filename:f ...) um.
Layouts erstellen
Fotobuch-Anbieter gibt es inzwischen wie Sand am Meer, aber kaum einer unterstützt Linux mit einem nativen Gestaltungsprogramm. Die ein odfer andere Software läuft immerhin unter Wine, manchmal gibt es auch ein webbasiertes Interface. Das fällt aber oft wenig komfortabel aus, von der Qualität der Gestaltungsmöglichkeiten ganz zu schweigen. Zum Glück nehmen inzwischen eine Reihe von Anbietern (siehe Tabelle “Fotodienstleister”) komplette PDFs beziehungsweise die einzelnen Seiten als JPGs entgegen.
Fotodienstleister
| Anbieter | Format | Bemerkung |
|---|---|---|
| Blurb [4] | PDF/X-3 | Details nur nach Registierung. |
| Cewe [5] | PDF/X-3 | Keine Verlinkung von der Consumer-Fotobuch-Website. Bietet Linux-Software an [6]. |
| Pixopolis [7] | JPG | Profiservice, erlaubt das Hochladen von JPGs. Explizit für Linux empfohlen. |
| Pixelspeed [8] | PDF 1.3/1.4 | Sehr gute Dokumentation. |
| Viaprinto [9] | PDF/X-3 | Gehört zu Cewe. Empfiehlt PDF/X-3, schreibt es aber nicht vor. |
Das eröffnet die Möglichkeit, das Fotobuch zum Beispiel in Open- oder LibreOffice zu gestalten. Wer allerdings auf ein exaktes Layout über alle Seiten hinweg Wert legt, Bilder während des Erstellens eventuell austauschen möchte und ein reproduzierbares Ergebnis braucht, greift zu einem Skript. ImageMagick bietet hier alles, um die einzelnen Seiten zu gestalten.
Im Beispiel sollen alle Bilder zentriert auf einem neutralen grauen Hintergrund platziert sein. Ein zurückhaltender Rahmen setzt dabei Akzente, Beschreibung, Ort und Datum ergänzen das Bild (Abbildung 5). Listing 3 zeigt das entsprechende Programm. Die Größenangabe in Zeile 10 hängt dabei vom Fotobuch-Hersteller ab. Zudem geht das Skript davon aus, dass die einzelnen Bilder für die Seiten schon in Druckgröße (also kleiner als die Seite) vorliegen.
Listing 3
#!/bin/bash inFile="$1" # Eingabebild pageNr="$2" # Seitennummer title="$3" # Titel info="$4" # Zusatz-Info (Ort, Datum) outFile="seite-`seq -f %02g $pageNr $pageNr`.tif" SIZE=4200x2800 BACKGROUND="gray75" convert \( -size "$SIZE" xc:$BACKGROUND \) \ \( "$inFile" -frame 7x7+0+3 -frame 3x3+0+3 \ -gravity south -background "$BACKGROUND" -splice 0x80 \ -font Arial-Standard -pointsize 64 \ -gravity southwest -annotate +0+2 "Bild $pageNr: $title" \ -gravity southeast -annotate +0+2 "$info" \ \) \ -gravity center -compose over -composite \ "$outFile"
Zeile 14 erzeugt den grauen Hintergrund in der gewünschten Größe. Hinter xc: verbirgt sich dabei ein in ImageMagick eingebautes Format, das eine einfarbige Leinwand (engl.: “canvas”) erstellt. Die Zeilen 15 bis 20 laden und verzieren das Bild, Zeile 21 setzt diese beiden Elemente übereinander.
Das Verzieren erfolgt in vier Schritten: Zuerst erhält das Bild einen Doppelrahmen (Zeile 15). Syntax und Beispiele zur Funktion -frame finden Sie ausführlich in der Dokumentation. Die Zeile 16 nutzt die Funktion -splice, um etwas Platz unter dem Bild (-gravity south) anzufügen. In diesen Freiraum schreiben die nächsten beiden Zeilen 18 und 19 den Titel und die Zusatzinformation (links unten: southwest, rechts unten: southeast).
Ein anderes Skript liest für alle Bilder den Dateinamen, Titel, Ort und Datum aus einer Datei und ruft für jedes Bild das Skript in Listing 3 auf. Anschließend erzeugt ImageMagick das fertige PDF:
$ convert seite-* fotobuch.pdf
Dabei ruft Convert intern den PDF-Spezialisten Ghostscript auf, der üblicherweise auf allen Linux-Systemen installiert ist. Falls es Probleme gibt, war die Arbeit aber nicht umsonst: Sie haben immer noch die Möglichkeit, die fertig gerenderten Seiten seitenfüllend über die Weblösungen der Anbieter in ein Buch einzubinden.
Fazit
Auf den ersten Blick sieht ein Programm wie in Listing 3 recht kompliziert aus. ImageMagick kommt aber durch das lineare Abarbeiten der Befehle eigentlich der menschlichen Denkweise sehr entgegen. In Prosa übersetzt lautet das Listing nämlich: “Erzeuge einen Hintergrund, lade das Bild, füge etwas Platz unten an, beschrifte das Bild unten links und unten rechts und lege dann das Bild auf den Hintergrund”.
Ganz einfach? Im Prinzip, ja. Aber wie bei jeder anderen Sprache gilt es, die Vokabeln zu lernen und die Grammatik zu üben, um deutsche Prosa nach ImageMagick zu übersetzen. Die ausführliche Anleitung hilft mit Unmengen von Beispielen hilft dabei, und im ImageMagick-Forum [3] beantworten die Mitglieder Anfragen sachkundig.
Glossar
-
CLUT
-
CLUT steht für Color Lookup Table. Dahinter verbirgt sich eigentlich ein Teil der Grafik-Hardware, der die Farbwerte eines indizierten Grafikformates mittels Tabelle in die entsprechenden Farben umsetzt.
Infos
[1] ImageMagick: http://www.imagemagick.org
[2] Anwendungsbeispiele und Erläuterungen zu Optionen und Operatoren: http://www.imagemagick.org/Usage/
[3] ImageMagic-Forum: http://www.imagemagick.org/discourse-server/
[4] Blurb: http://de.blurb.com/make/pdf_to_book
[5] Cewe: http://www.cewe.de/business-shop/pdf-druckservice/
[6] Cewe Fotobuch-Designer: Thomas Leichtenstern, “Eingebunden”, LU 02/2011, S. 70, https://www.linux-community.de/22210
[7] Pixopolis: http://www.pixopolis.de/profi-service/fotobuch/
[8] Pixelspeed: http://www.pixelspeed.com/software/pdf-druckservice.html
[9] Viaprinto: https://www.viaprinto.de








