Licht und Schatten

Fortgeschrittene Bildbearbeitung auf der Konsole

16.02.2009
Dank Imagemagick beglücken Sie nicht nur die Oma mit Urlaubsfotos, sondern polieren Fotos auf und gestalten plastisches Bildwerk.

In der Praxis dient das kleine Imagemagick-Tool Convert häufig als schnöder Dateiformat-Konverter. Dabei steckt in dem kleinen Tausendsassa viel mehr. Mit virtueller Schere und Kleber bewaffnet, verpasst er Ihren Fotos den letzten Schliff, malt mit einem Zeichenstift bunte Logos und zieht diese auf Wunsch noch in die dritte Dimension. Bevor Sie zur destruktiven Bildbearbeitung schreiten, wandeln Sie sicherheitshalber alle JPEG-Fotos der Kamera in ein verlustfreies Format um:

$ for i in *.jpg; do convert $i $(basename $i .jpg).tiff; done

Zwar frisst ein Bild als TIFF wesentlich mehr Speicherplatz, dafür entstehen später keine unschönen Block-Artefakte beim Bearbeiten der Bilder.

Dummerweise macht Imagemagick keine Schritte rückgängig. Daher sollten Sie nur mit Kopien arbeiten und Zwischenergebnisse immer in neuen, temporären Dateien speichern.

TIPP

Dateiformate erkennen die Imagemagick-Tools automatisch an der Endung. Alternativ geben Sie convert bild.jpg TIFF:exot.exo ein.

Abbildung 1: Specht Ruprecht dient als Ausgangsbild für das erste Experiment. Nach der Behandlung durch -crop steht der Vogel im Zentrum der Aufmerksamkeit.

Scherenschnitt

Auf Urlaubsreisen bannen Sie gewöhnlich nur selten ein Motiv perfekt auf die Speicherkarte. Der Vogel aus Abbildung 1 (links) etwa hüpft in der linken unteren Ecke herum, das ihn umgebende Grünzeug lenkt da eher ab. Sie setzen deshalb die virtuelle Schere an:

$ convert vogel.tiff -crop 1500x1000+250+1200 ausschnitt.tiff

In diesem Fall geht Convert von der linken oberen Ecke aus 250 Pixel nach rechts, dann 1200 Pixel nach unten und schneidet ein Rechteck der Größe von 1500x1000 Pixeln aus. Das Ergebnis zeigt Abbildung 1 (rechts). Alternativ verdaut crop auch Prozentangaben. Die Anweisung:

$ convert vogel.tiff -crop 50x25%+0+0 ausschnitt.tiff

liefert die linke Hälfte des Bildes, von der dann wiederum nur die oberen 25 Prozent ins Ergebnis wandern.

Erdanziehung

Zur Berechnung der Koordinaten müssen Sie nicht immer gleich den Taschenrechner zücken. Im Ausgangsbild sitzt der Vogel in der linken unteren Ecke:

$ convert vogel.tiff -gravity SouthWest -crop 1500x1000+0+0 ausschnitt.tiff

Damit beginnt Convert zunächst in der linken unteren Ecke – dem "Südwesten" des Fotos – und schneidet dann von dort aus gesehen einen Bereich von 1500x1000 Pixel aus. Neben SouthWest dürfen Sie auch alle anderen Himmelsrichtungen verwenden. Den Mittelpunkt eines Bildes erreichen Sie mit Center. Convert richtet dabei den Ausschnitt stets am neuen Bezugspunkt aus. Wählen Sie beispielsweise den unteren Rand:

$ convert vogel.tiff -gravity South -crop 1500x1000+0+0 ausschnitt.tiff

In diesem Fall zentriert Convert den 1500x1000 Pixel großen Ausschnitt an der Mitte der unteren Bildkante. Dies müssen Sie mit berechnen, wenn Sie den Ausschnitt von dort aus noch verschieben wollen.

Stanzen

Der Parameter -crop liefert ausschließlich rechteckige Bildbereiche. Bei komplizierteren Schnittmustern brauchen Sie zunächst eine eigene Stanzvorlage, die so genannte Maske oder englisch "matte". Dazu erstellen Sie mit einem Malprogramm ein Schwarzweißbild, das die selbe Größe wie Ihr Foto besitzt. Imagemagick legt dann diese Maske über das normale Bild. Alle darin schwarzen Bereiche fallen später der Schere zum Opfer, alle weißen wandern ins Ausgabebild. Das kann man sich wie eine Ausstechform beim Plätzchenbacken vorstellen. Das Ausstanzen übernimmt wieder Convert:

$ convert vogel.tiff maske.tiff +matte -compose CopyOpacity -composite freistell.png

Der Parameter -composite führt die beiden Bilder mittels der hinter -compose angegebenen Methode zusammen. In diesem Fall bleibt das Ergebnis an allen Stellen durchsichtig, an denen die Maske schwarz war. Legen Sie Wert auf die Transparenz, müssen Sie für das Ergebnisbild ein Dateiformat wählen, das damit umgehen kann – in diesem Fall PNG. Das ausgestanzte Objekt kleben Sie jetzt auf einen neuen Hintergrund:

$ convert hintergrund.tiff freistell.png -composite final.tiff

Für eine pixelgenaue Platzierung sorgen die Parameter -gravity und -geometry:

$ convert hintergrund.tiff freistell.png -gravity Center -geometry +100+10 -composite final.tiff

Dieser Befehl zentriert das ausgeschnittene Objekt auf dem Hintergrund und verschiebt es dann 100 Pixel nach rechts, sowie 10 Pixel nach unten.

TIPP

Grauverläufe in der Maske tauchen später im Ergebnis als halbtransparente Bereiche auf. Auf diese Weise lassen sich sehr einfach Überblendungen erzeugen.

Bilderrahmen

Transparenzen ermöglichen neue, interessante Effekte. Abbildung 2 (mitte) zeigt beispielsweise eine Vorlage für einen hübschen Rahmen. Mit ihr wurde das Holz (links) ausgestanzt und über das Foto mit dem Vogel gelegt (rechts). Diesen dreistufigen Vorgang dürfen Sie übrigens auch in einem Befehl zusammenfassen und sich so den Umweg über eine PNG-Datei sparen:

$ convert hintergrund.tiff holz.tiff maske.png -composite final.tiff
Abbildung 2: In die Holzvorlage (links) stanzt die Maske (Mitte) ein Loch in Form der schwarzen Fläche. Den ausgestanzten Holzrahmen legt Convert dann über den Specht (rechts).

Malen nach Zahlen

Bislang mussten Sie die Masken in einem Malprogramm erstellen. Doch auch dies übernimmt Convert. Dazu füttern Sie den Parameter -draw mit Informationen darüber, was er zeichnen soll – etwa ein Rechteck:

$ convert -size 150x100 xc:lightgreen -fill white -stroke black -draw "rectangle 10,20 130,80" rechteck.tiff

Der Parameter xc:lightgreen sorgt dabei für einen hellgrünen Hintergrund, auf den Convert ein weißes Rechteck (-fill white) mit schwarzem Rand (-stroke black) malt. Der Hintergrundparameter dient zugleich als Ersatz für eine Eingabedatei – andernfalls meldet Convert missing an image filename. Die Zahlen hinter rectangle geben die linke obere und untere rechte Ecke des Rechtecks an.

Der Option -draw dürfen Sie sogar mehrere Zeichenanweisungen mitgeben, die Sie am Stück zwischen die Anführungszeichen klemmen:

$ convert -size 150x100 xc:grey -draw "fill red circle 45,50 35,80 fill blue circle 85,50 95,80" kreise.tiff

Dies erzeugt die beiden sich überlagernden Kreise aus Abbildung 3. Deren Koordinaten lassen sich nicht ohne Mühe bestimmen: Die ersten beiden Werte geben die Lage des Kreismittelpunkts an, die zwei danach einen Punkt auf dem Kreisrand. Da die Farben hier für jeden Kreis unterschiedlich ausfallen, positionieren Sie diese innerhalb der Anführungszeichen.

Abbildung 3: Neben Kreisen und Rechtecken kennt Convert noch viele weitere Zeichenbefehle, wie beispielsweise Linien, Punkte und sogar Text.

Die obigen Zeichenanweisungen in eine Kommandozeile zu quetschen artet spätestens bei größeren Gemälden in einen unübersichtlichen Wust von Parametern aus. Deshalb dürfen Sie alles, was hinter -draw in den Anführungszeichen folgt, in eine externe Textdatei auslagern, die Sie etwa kreise.mvg nennen:

$ convert -size 150x100 xc:grey -draw @kreise.mvg kreise.tiff

Auf diese Weise malen Sie recht schnell pixelgenaue Masken. Sie müssen lediglich darauf achten, als Zeichenfarbe Weiß und als Hintergrundfarbe Schwarz zu verwenden.

Logisch

Bislang blieben die Bilder recht flach. Im Zusammspiel mit Masken verlängern Sie die Figuren in dritte Dimension, wie das folgende kleines Logo beweist. Zeichnen Sie zunächst dessen Grundform und verwenden Sie dazu wieder nur schwarze und weiße Farbe: Die Grafik dient zugleich als Maske ihrer selbst. Das Beispiel in Abbildung 4 (links) erzeugt der Befehl aus Zeile 1 in Listing 1. Der Schalter +matte sorgt dafür, dass Convert jegliche Transparenz ignoriert.

In Zeile 2 kommen als nächstes rote Farbe und roter Text ins Spiel. Zunächst dupliziert (+clone) die gerade angelegte Maske und koloriert (-colorize) die Kopie mit roter Farbe (-fill red). Anschließend greift der Befehl wieder zur Maske und stanzt damit das eingefärbte Logo aus. Zum Schluss kommt in die Mitte noch eine Beschriftung (Parameter -annotate). 34 Punkt groß und eine weiß gefüllt, hebt sie sich durch einen schwarzen Rand ab. Die Ziffern hinter -annotate verschieben die Schrift ein wenig aus dem Zentrum, damit sie brav im roten Rechteck bleibt.

Listing 1
$ convert -size 150x100 xc:black -draw "fill white roundrectangle 20,20 125,70 10,10 fill black circle 120,65 135,80 fill white circle 120,65 130,75" -gaussian 1x1 +matte logo_maske.png
$ convert logo_maske.png +clone +matte -compose CopyOpacity -composite -fill red  -colorize 100% -pointsize 34 -fill white -stroke black -gravity Center  -annotate 0x0-10-5 "Logo" logo.png
Abbildung 4: Erst kommt die Maske für das Logo (links), dann folgen Farbe und Schrift (rechts).

Dickes Ding

Für den Eindruck einer dritten Dimension sorgen Verläufe von Licht und Schatten. Wo diese später im Logo auftreten, bestimmt die Maske. Die Schatten selbst generiert der Parameter -shade. Wenden Sie -shade jedoch direkt ohne weitere Vorsichtsmaßnahmen auf die Maske an, dann erhalten Sie einen starken 3D-Effekt, der fast wie eine Prägung wirkt. Für weichere Kanten sorgt der Weichzeichner -blur: Je öfter Sie ihn anwenden, desto "runder" erscheint später das Logo:

$ convert logo_maske.png -blur 0x4 -blur 0x4 -blur 0x4 -blur 0x4 +matte logo_weich.png

Vier Weichzeichnungsdurchläufe sollten genügen. Der Wert nach dem x bestimmt die Stärke der Weichzeichnung, der davor die Größe des Einflussbereichs.

Als nächstes schalten Sie das Licht ein. Stellen Sie sich dazu einen kleinen Spot vor, der von schräg oben auf Ihr Logo scheint. An dessen Oberkante entstehen Glanzlichter, an der Unterseite dunkle Bereiche. Zunächst zum Licht (Abbildung 5, links):

$ convert logo_weich.png -shade 110x0 -normalize  logo_hell.png

Jetzt kommt ein kleiner Trick: Um an die dunklen Bereiche zu kommen, platzieren Sie die gedachte Lichtquelle auf der anderen Seite (Abbildung 5, Mitte):

$ convert logo_weich.png -shade 110x180 -normalize logo_dunkel.png

Das zweite Bild sieht nicht gerade nach Schatten aus. Was Sie hier in den Händen halten, ist eine Maske für die dunklen Bereiche: An allen weißen Stellen sieht man später im Bild einen Schatten.

Die Datei logo_hell.png dient jetzt als Maske für ein reines, weißes Bild. Das Ergebnis der Kombination sind alle Lichter des späteren Bildes. Die Datei logo_dunkel.png dient hingegen als Maske für ein komplett schwarzes Bild, womit man wiederum alle dunklen Stellen des Logos erhält. Das fertige Bild mit allen Lichtern und Schatten (Abbildung 5, rechts) erstellt das Befehlsmonster aus Listing 2.

Listing 2
$ convert \( logo_hell.png -negate -background white -channel A -combine +channel \) \( logo_dunkel.png  -negate -background black -channel A -combine +channel \) -compose Over -composite logo_lichter.png

Achten Sie hier unbedingt auf den korrekten Sitz der Leerzeichen und der Klammern. Letztere kennzeichnen so genannte Image Stacks (Bilderstapel). Die jeweils darin enthaltenen Anweisungen führt der Befehl separat aus, bevor er die beiden Ergebnisse übereinander legt und das Gesamtergebnis in logo_lichter.png speichert. Bei einem solchen Image Stack handelt es sich somit um nichts anderes als ein kleines "Kommando im Kommando". Damit die Shell die Klammern nicht falsch interpretiert, brauchen Sie die vorangestellten Rückstriche.

Abbildung 5: Die Maske für die hellen Bereiche des Logos (links), die für die dunklen (Mitte) und schließlich alle Lichter und Schatten (rechts).

Feinschliff

Das fertige Bild enthält alle Schatten und Lichter, die für den dreidimensionalen Eindruck sorgen. Dieses Bild müssen Sie nur noch über das zweidimensionale Logo stülpen (Abbildung 6, links). Das erledigt der Befehl in Zeile 1 von Listing 3. Wenn Sie mögen, fügen Sie – wie in Zeile 2 zu sehen – auf dem Untergrund noch einen Schatten hinzu. Dies erzeugt wieder nur den Schatten (Abbildung 6, Mitte), den Sie dem Logo noch leicht versetzt unterschieben (Abbildung 6, rechts). Das erledigt das Kommando in Zeile 3.

Listing 3
$ convert logo.png logo_lichter.png -compose ATop -composite logo_3D.png
$ convert logo_3D.png  -channel A  -blur 0x6 +channel -fill grey -colorize 100% logo_schatten.png
$ convert logo_3D.png -background none -gravity SouthEast -splice 6x6+0+0 logo_schatten.png -compose Dst_Over -composite  logo_3Dmitschatten.png
Abbildung 6: Das dreidimensionale Logo links lässt sich noch mit einem Schatten (Mitte) zum plastischen Gesamtkunstwerk (rechts) aufpolieren.

Auch mit diesen fortgeschrittenen Techniken gelangt Imagemagick noch nicht an seine Grenzen. Weitere Tricks zum Umgang mit der vielseitigen Bildbearbeitungs-Software gibt es etwa unter [1] und [2] im Internet.

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare