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
Abbildung 1: Das Tool 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.

Abbildung 2: Werkzeugleiste von Imagemagick öffnet sich beim Klick ins Bild, das Sie mit display 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.

Abbildung 4: Imagemagick bietet mehrere Möglichkeiten, Farben zu benennen.

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, http://www.linux-community.de/9036

Der Autor

Frank Hofmann studierte Informatik an der Technischen Universität Chemnitz. Derzeit arbeitet er in Berlin im Open-Source-Expertennetzwerk Büro 2.0 als Dienstleister mit Spezialisierung auf Druck und Satz. Er gehört zum Vorstand der Linux User Group Potsdam (upLUG).

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Ähnliche Artikel

Kommentare
"Nettes" Tutorial - einfach geht sowas aber auch anders ;-)
R. H., Dienstag, 08. Februar 2011 13:23:34
Ein/Ausklappen

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 unterschiedlichster Größe und Auflösung für ein Webalbum einschließlich Thumbs sind in weniger als ner Halben Stunde Arbeit (Batch-Ablauf "zusammenklicken") angeschoben zu konvertieren.
Bei ner schnellen Maschine kommt man nicht mal dazu, nen Kaffee aus der Kaffeemaschine zu ziehen ;-)
Übrigens - PHATCH arbeitet mit ImageMagik bzw. GraphicsMagic und ist "nur" ein Aufsatz und ne Art Wrapper für dessen Befehle.
Alle Konvertierungseinstellungen (Abläufe) lassen sich abspeichern, so dass auch nach Monaten der Austausch eines Bildes im Web problemlos möglich ist, indem halt dann das eine Bild genauso nachbereitet wird, wie die einst im Stapel abgearbeiteten. Beim Abspeichern der .phatch-Datei im entsprechenden "Kunden"Verzeichnis mit nem halbwegs sprechenden Namen klappt das auch noch, wenn man schon längst vergessen hat, was man da mal gemacht hat.

Toll ist das Feature, dass man auch einzelne Schritte oder auch Schrittfolgen temporär für einen Lauf ausblenden kann, so dass man einen einmal zusammengestellten Stapel auch noch für einzelne Bilder oder Bildfolgen leicht modifizieren kann, ohne alles nochmal komplett durchzugehen - ist doch Bildkonvertierung / Anpassung oft mit Rechenarbeit und doch etwas Hirnschmalzeinsatz im vorfeld verbunden.

Phatch ist eins dieser Unix-Like-Tools, die Computer und produktive Arbeit damit richtig sinnvoll machen.
Absolut fern von dem oft vorzufindenden Grundsatz: "Computer sind dazu da, die Probleme zu lösen, die man ohne Computer nicht hätte..."

Viel Spass beim Testen - und wer's einmal begriffen und erfolgreich benutzt hat, kann die Kommandozeile fürs Bilder bearbeiten beruhigt vergessen....


Bewertung: 153 Punkte bei 21 Stimmen.
Den Beitrag bewerten: Gut / Schlecht
-
Kuckstu Phatch (war: "Nettes" Tutorial ...)
Jörg Luther, Mittwoch, 09. Februar 2011 18:38:11
Ein/Ausklappen

Hi R.H.,

Phatch hat LinuxUser bereits im Foto-Schwerpunkt in Ausgabe 09/2010 ausführlich vorgestellt. Der Artikel findet sich unter http://www.linux-community.de/21720 (frei zugänglich).

Gruß,
Jörg


Bewertung: 147 Punkte bei 18 Stimmen.
Den Beitrag bewerten: Gut / Schlecht
Re: "Nettes" Tutorial - einfach geht sowas aber auch anders ;-)
Frank Hofmann (unangemeldet), Sonntag, 20. Februar 2011 09:07:38
Ein/Ausklappen

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


Bewertung: 136 Punkte bei 17 Stimmen.
Den Beitrag bewerten: Gut / Schlecht