![]() |
|
||||||||||||||||||
|
|||||||||||||||||||
|
|||||||||||||||||||
von Daniel Molkentin
Sollen digitale Schnappschüsse zu richtig ansehnlichen Bildern werden, leisten Programme wie DigiKam dem Anwender zwar Hilfestellung bei den grundlegenden Bildkorrekturen. Doch oft können die auf diesem Weg erzielbaren Optimierungen nicht völlig befriedigen -- mehr Individualität ist gefragt. Die bieten die ImageMagick-Tools -- und einige weitere Schmankerl noch dazu.
Anders als die klassische Linux-Bildverarbeitung Gimp bestehen die ImageMagick-Tools aus mehreren, kommandozeilenorientiert arbeitenden Programmen. In bester Linux-Manier eröffnet das die Möglichkeit, deren Fähigkeiten beliebig zu kombinieren. Mit etwas Shell-Programmierung automatisieren Sie obendrein die Optimierungsläufe -- bei der für Fotos typischen Massenabfertigung ein nicht gering zu schätzender Vorteil.
Was die ImageMagick-Tools im Detail alles leisten, wollen wir uns im Folgenden am Beispiel des Aufmacherbildes dieses Artikels genauer ansehen.
Fedora Core 1, Mandrake Linux und Suse 9.2 bringen das ImageMagick-Paket bereits vorinstalliert mit. Betreiben Sie Ihren Rechner jedoch unter Suse 9.1, dann müssen Sie per YaST nachrüsten. Starten Sie dazu YaST aus dem K-Menü und wählen Sie im Bereich Software den Punkt Software installieren oder löschen an. Nach einer kurzen Ladezeit erscheint der Paket-Manager, in dessen Suchfeld Sie als Stichwort imagemagick angeben.
Der Paket-Manager identifiziert daraufhin eine ganze Reihe von Installationsdateien, die direkt oder indirekt zum ImageMagick-Umfeld zählen. Davon benötigen Sie jedoch nur das Programm- und Bibliothekspaket namens ImageMagick, das Sie mit einem Mausklick zur Installation vormerken. Auf die in der Liste ebenfalls aufgeführten Entwicklungspakete und Perl-Bindungen können Sie dagegen getrost verzichten. Daher müssen Sie nun nur noch durch Anwahl der Schaltfläche Übernehmen die Installation starten.
ImageMagick kommt mit einer Vielzahl von Grafikformaten problemlos zurecht. Die meisten davon ergänzen die eigentlichen Bilddaten um so genannte Meta-Informationen, also um zusätzliche Informationen über das Bild. Dazu können beispielsweise Angaben zur Größe des Bildes oder dessen Farbtiefe zählen, unter Umständen finden sich hier aber auch Daten zu Aufnahmezeit, Belichtung oder Kameratyp. JPEG-Dateien verstauen solche Meta-Informationen im EXIF-Format [1].
| Das EXIF-Format |
|
Das Kürzel EXIF steht für Exchangeable Image File Format. Dieses speziell für Digitalkameras entwickelte Dateiformat ergänzt die eigentliche Bilddatei um Kommentarfelder und Informationen über Kamera-Einstellungen wie Belichtungszeit, verwendete Lichtquelle, Blende, Entfernung zum Objekt, und anderes mehr. EXIF wurde in den 90er Jahren vom japanischen Industrie-Gremium JEIDA als Teil des Kamera-Standards DCF (Design rule for Camera File system) definiert [2]. |
Mit den entsprechenden Angaben kennt sich das ImageMagick-Werkzeug identify bestens aus. Der Aufruf
identify *.jpg
ergibt beispielsweise ein Resultat wie das folgende:
dsc01889.jpg JPEG 640x480 DirectClass 8-bit 151kb 0.0u 0:01 dsc01890.jpg[1] JPEG 640x480 DirectClass 8-bit 152kb 0.0u 0:01 dsc01891.jpg[2] JPEG 640x480 DirectClass 8-bit 139kb 0.0u 0:01 dsc01892.jpg[3] JPEG 640x480 DirectClass 8-bit 135kb 0.0u 0:01 dsc01893.jpg[4] JPEG 640x480 DirectClass 8-bit 150kb 0.0u 0:01
In diesem Fall wurden alle Bilder als JPEG-Datei mit der (sehr geringen) Auflösung von 640x480 Pixeln sowie 8 Bit Farbinformation pro Farbkanal und Pixel gespeichert. Bei den drei Farbkanälen des üblicherweise eingesetzten RGB-Modells ergibt das eine Farbtiefe von 24 Bit. Daneben finden sich Angaben zur Dateigröße, der Belichtungstärke sowie der Belichtungszeit. Die verwendete Kamera unterstützt allerdings die Angabe der Belichtungsstärke nicht, weshalb sie diese Werte auf Null gesetzt hat.
Der Aufruf von identify zusammen mit dem Bildnamen führt zur Ausgabe aller Meta-Daten zum angegebenen Bild (Abbildung 1). Wollen Sie -- beispielsweise im Rahmen eines Skripts -- nur einzelne dieser Informationen verwenden, hilft Ihnen der Parameter format ans Ziel. So ergibt etwa der Aufruf
identify -format "%m:%f %wx%h" dsc02080.jpg</C>
als Ausgabe die Information
JPEG:dsc02080.jpg 640x480

Eine Zusammenstellung der wichtigsten Formatkenner für den Parameter format finden Sie in Tabelle 1.
| Tabelle 1: Parameter für identify -format | |
| %b | Dateigröße |
| %c | Kommentar |
| %d | Verzeichnis |
| %e | Dateierweitertung (z.B. .jpg) |
| %f | Dateiname |
| %h | Höhe |
| %l | Beschriftung |
| %w | Breite |
| %x | x Auflösung |
| %y | y Auflösung |
| %# | Signatur |
| \n | Neue Zeile |
Darüber hinaus bietet die Format-Option %[EXIF:Feldname] die Möglichkeit, gezielt einzelnen EXIF-Informationen anzuzeigen. Statt Feldname geben Sie hier einfach einen EXIF-Feldbezeicher aus Tabelle 2 an. Das muss nicht immer funktionieren: Zum einen finden sich EXIF-Informationen nur in JPEG-Bildern, zum anderen enthalten nicht alle JPEGs zwangsläufig alle beschriebenen Zusatzdaten.
| Tabelle 2: Wichtige EXIF-Felder | |||
| ImageWidth | ImageLength | BitsPerSample | Compression |
| PhotometricInterpretation | FillOrder | DocumentName | ImageDescription |
| Make | Model | StripOffsets | Orientation |
| SamplesPerPixel | XResolution | YResolution | Software |
| DateTime | Artist | Copyright | ExposureTime |
| ISOSpeedRatings | ExifVersion | DateTimeOriginal | DateTimeDigitized |
| CompressedBitsPerPixel | SubjectDistance | MeteringMode | LightSource |
| Flash | ColorSpace | ExifImageWidth | ExifImageLength |
| InteroperabilityOffset | FlashEnergy | SpatialFrequencyResponse | SubjectLocation |
| ExposureIndex | SensingMethod | FileSource | SceneType |
ImageMagick bringt auch einen Bildbetrachter mit, der sich sinnigerweise schlicht display nennt. Das Werkzeug kann jedoch weitaus mehr, als lediglich Bilder aller erdenklichen Formate anzuzeigen. So fördert etwa ein Mausklick auf das Bild ein Menü zu Tage, über das Sie zahlreiche Effekte anwenden können. In dieser Hinsicht ähnelt display zwar dem Gimp, bleibt jedoch beim Komfort weit hinter der GNU-Bildverarbeitung zurück. Dafür punktet das Tool aus dem ImageMagick-Fundus mit geringen Ladezeiten und der schnellen Bearbeitung über Tastenkürzel (Tabelle 3).
| Tabelle 3: Wichtige Shortcuts für display | |
| [Strg-O] | Bild laden |
| [Leertaste] | Nächstes Bild |
| [Rückschritt] | Vorheriges Bild |
| [Strg-S] | Speichern |
| [Strg-N] | Bildfläche Leeren |
| [Strg-Q] | Beenden ohne Speichern |
| [Strg-Z] | Letzte Aktion rückgängig machen |
| [Strg-R] | Letzte Aktion wiederholen |
| [Strg-X] | Ausschneiden |
| [Strg-C] | Kopieren |
| [Strg-V] | Einfügen |
| [<] | Bildgröße halbieren |
| [.] | Orginal-Bildgröße wiederherstellen |
| [>] | Bildgröße verdoppeln |
| [%] | Größe individuell ändern |
| [@] | Bild neu laden |
| [C] | Bild stutzen |
| [[] | Bild beschneiden |
| [H] | Bild horizontal drehen |
| [V] | Bild vertical drehen |
| [/] | Bild 90 Grad im Uhrzeigersinn drehen |
| [*] | Bild frei rotieren |
| [S] | Bild scheren |
| [R] | Bild rollen |
| [T] | Ecken trimmen |
| [Umschalt-H] | Farbnuancen ändern |
| [Umschalt-S] | Sättigung ändern |
| [Umschalt-L] | Hellingkeit ändern |
| [Umschalt-G] | Gamme-Wert korrigieren |
| [Umschalt-C] | Kontrast erhöhen |
| [Umschalt-Z] | Kontrast verringern |
| [=] | Histogramm angleichen |
| [Umschalt-N] | Histogramm normalisieren |
| [Umschalt-~] | Farben invertieren |
| [,] | In Graustufen konvertieren |
| [F2] | Fleckenreduktion |
| [F3] | Prägungseffekt |
| [F4] | Rauschen reduzieren |
| [F5] | Rauschen hinzufügen |
| [F6] | Bild schärfen |
| [F7] | Bild weichzeichnen |
| [F8] | Schwellwerte setzen |
| [F9] | Kantenerkennung |
| [F10] | Pixel um zufällige Werte verschieben |
| [F11] | Bild beleuchten (entfernte Lichtquelle) |
| [F12] | Kanten aufhellen oder verdunkeln (3D-Effekt) |
| [F13] | Farben trennen |
Herz- und Schmuckstück der ImageMagick-Suite bildet das Programm convert. Es konvertiert Dateien in und aus rund 90 Bildformaten, gleichzeitig beherrscht es Dutzende Transformationen. Mit folgendem Code-Schnipsel erzeugen Sie beispielsweise Vorschaubilder aller JPEGs im aktuellen Verzeichnis und legen diese in einem Unterverzeichnis ab:
mkdir preview/ for bild in *.jpg; do convert -resize 320x320 $bild preview/$bild; done
Die Transformation resize skaliert hier die Bilder so, dass die maximale Breite respektive Höhe anschließend noch 320 Pixel beträgt. Bei einer ursprünglichen Bildgröße von 640x480 Pixeln entspräche das einer Verkleinerung auf ein Viertel des Originalbildes. Speziell bei großen Ausgangsformaten können Sie die Konvertierung mit Hilfe der Anweisung size noch beschleunigen (Abbildung 2). Mit ihrer Hilfe geben Sie dem JPEG-Decoder schon vorab bekannt, auf welche Größe Sie das Bild reduzieren wollen. Das folgende resize kann dann gleich auf den vorab beschränkten Bilddaten operieren:
mkdir preview/ export res="320x320" for bild in *.jpg; do convert -size $res -resize $res 320x320 $bild preview/$bild; done;

Liefert Ihre Digitalkamera ein anderes Bildformat, wie etwa TIFF, dann müssen Sie die Fotos für die Verwendung auf Ihrer Website in JPEG-Bilder umwandeln. Auch diese Aufgabe erledigen Sie bequem mit Hilfe von convert, das anhand der neuen Datei-Endung automatisch das gewünschte Zielformat erkennt. Um bei der skriptgesteuerten Umwandlung die alte Datei-Endung abzuschneiden, setzen Sie zusätzlich das Tool basename ein:
for bild in *.tif; do convert $bild `basename $bild .tif`.jpg; done;
Sie möchten zusätzlich einen Copyright-Vermerk in Ihre Fotos einbauen? Dazu verwenden Sie die Funktion draw, die direkt auf ein Bild "zeichnen" kann. Dazu erwartet sie mindestens drei Argumente: die Art dessen, was gezeichnet werden soll (hier ein Text); die Ursprungskoordinaten auf dem Bild; und schließlich die Ausgabe selbst. Für den Copyright-Vermerk ergänzen Sie dieses Minimalprogramm durch einige zusätzliche Angaben. So wollen Sie sicherlich einen gefälligen Font und eine passende Farbe für den Text wählen.
Gerade bei kontrastreichen Bildern gibt es keine Textfarbe, die in allen Bildbereichen gut zu sehen ist. Hier behelfen Sie sich mit einem Griff in die Trickkiste: Zuerst weisen Sie convert an, um ein Pixel zur vorgesehenen Textposition versetzt den Schriftzug in einer zur Orginalfarbe kontrastreichen Farbe zu zeichnen. Anschließend fügen Sie den Text an der korrekten Position ein. Dadurch entsteht ein unaufdringlicher Schatteneffekt, der die Schrift leicht lesbar macht.
Ihr Copyright-Text enthält sicherlich Leerzeichen, Sie müssen ihn darum durch Hochkommata begrenzen. Damit sie ihn nicht für jedes Bild neu angeben müssen, definieren Sie ihn in einer Variablen.
export text="(c) 2005 by Gernot Gans" convert -font helvetica -fill black \ -draw "text 16,16 '$text'" -fill white \ -draw "text 15,15 '$text'" bild.jpg bild-kommentiert.jpg
Da ImageMagick die Parameter stets von links nach rechts abarbeitet und sich einmal gesetzte Optionen auch für weitere Vorgänge in der selben Programmanweisung merkt, müssen Sie den Font für Schatten und Text in diesem Beispiel nur einmal angeben.
Sogar mit künstlerischen Fähigkeiten kann ImageMagick glänzen. Kohlezeichnungen eignen sich als netter Hingucker, und wie jedes gute Grafikprogramm bietet auch ImageMagick einen entsprechenden Effekt:
convert landschaft.jpg -charcoal 4 landschaft_mit_kohle.jpg
Der Parameter charcoal bestimmt hier die Härte des Kohlestiftes. Experimentieren Sie ruhig ein wenig, bis das Ergebnis Ihren Ansprüchen gerecht wird (Abbildung 3).
Viele Kameras lassen sich mittels eines Auto-Timers so programmieren, dass sie in regelmäßigen Zeitabständen Aufnahmen machen. Befestigt man die Kamera dazu auf einem Stativ, lassen sich beeindruckende Bildsequenzen erzeugen. convert hilft dabei, diese in eine noch beeindruckendere Animation umzuwandeln. Mit
convert -delay 10 *.jpg film.mng
kombinieren Sie alle Fotos im aktuellen Verzeichnis zu einer Animation. Dabei geben die Bildnamen die Reihenfolge vor. Der Parameter delay gibt in Hundertstelsekunden an, in welchem Zeitintervall die einzelnen Bilder aufeinander folgen sollen. Den erzeugten Film sehen Sie sich mit dem ImageMagick-Programm animate an:
animate film.mng
ImageMagick bietet mit convert bei der Automatisierung eine breite Anzahl von Möglichkeiten, Bilderserien per Skript zu bearbeiten. Dieser Artikel hat Ihnen einen schmalen Ausschnitt der entsprechenden Fähigkeiten demonstriert, bei Interesse sollten Sie jedoch eigene Experimente anschließen. Deren Ergebnisse können Sie schnell und effizient mit den Werkzeugen animate und display überprüfen. Das Paket rundet identify ab, das nahezu jedes Grafikformat Farbe bekennen lässt. (jlu)
| Infos |
|
[1] Exchangeable Image File Format: http://www.exif.org/
[2] EXIF v2.1 (JEIDA-49-1998):http://it.jeita.or.jp/jhistory/document/standard/exif_eng/Exife.pdf |
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links" nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedruckten Fassung entsprechen.
Druckerfreundliche Version |
Feedback zu dieser Seite |
Datenschutz |
© 2010 Linux New Media AG |
Last modified: 2007-04-05 11:10
[Linux-Magazin]
[LinuxUser]
[Linux-Community]
[Linux Events]
[Linux Magazine]
[Linux Magazine Poland]
[Linux Community Poland]
[Linux Magazine Brasil]
[Linux Magazine Spain]
[Linux Technical Review]