Aufmacher

Pixelzauber

Bildbearbeitung auf der Konsole

01.02.2008 Bei der Nachbearbeitung von Fotos quälen sich viele Anwender mit Gimp herum – dabei verdaut das Konsolentool Imagemagick große Bilderfluten in kürzester Zeit.

Die Winterferien sind vorbei, und die neue Digitalkamera platzt aus allen Nähten. Um den daheim gebliebenen einen langweiligen Dia-Abend zu ersparen, wollen Sie eine Bildergalerie auf die Homepage stellen. Das bedeutet Arbeit: Sie müssen Fehlschüsse aussortieren und kleine Vorschaubilder basteln – schließlich kann die Oma im Sauerland mit ihrem Modem nicht Tonnen an Bildmaterial herunterladen.

Gewöhnlich greifen Sie dafür zu Gimp, öffnen nacheinander jedes Bild, bearbeiten es, verkleinern es und speichern es schließlich. Darüber geht schnell einmal ein ganzes Wochenende vorbei. Zum Glück bringt jede gute Distribution Imagemagick mit, eine Sammlung von Kommandozeilentools zur Bildmanipulation.

Nein, das ist kein Tippfehler: Die Werkzeuge bedienen Sie fast ausschließlich über die Konsole. Die Tools verarbeiten spielend riesige Bildermengen wie am Fließband. Um etwa alle 451 Urlaubsfotos mit einem Rahmen zu versehen, genügt zum Beispiel schon ein kurzer Befehl.

Typische Anwendungsbereiche

Die Imagemagick-Programme eignen sich besonders für die folgenden Aufgabenbereiche:

  • Konvertierung in andere Bildformate
  • Änderung der Bildgröße
  • Pixelgenau drehen, skalieren und ausschneiden
  • Anwenden von Filtern und Effekten
  • Erstellung von Animationen für das Web
  • Erstellen von einfachen Grafiken mittels geometrischer Grundformen oder durch Kopieren von (kleineren) Grafikschnipseln
  • Erzeugen von Thumbnails und Rahmen
  • Mehrere Bilder zu einem Gesamtwerk zusammenstellen (etwa als Poster, Collage oder Bildergalerie)

Programmübersicht

Programm Funktion
convert konvertiert das Originalbild in ein anderes Format, dabei angewandte Filter und Effekte betreffen nur das Ergebnis
mogrify ändert im Gegensatz zu convert das Bild direkt
composite überlagert mehrere Bilder
montage kombiniert Bilder zu einem Panorama, einem Poster oder einer Übersicht
import erstellt Screenshots
identify liefert Informationen über eine Bilddatei
display zeigt Bilder in einem Fenster an
animate spielt eine Animation ab

Ausschussware

Als erstes sollten Sie die misslungenen Aufnahmen aussortieren. Dabei hilft das Programm display (Abbildung 1). Der Befehl display *.jpg etwa zeigt alle JPEG-Bilder im aktuellen Verzeichnis an, die Leertaste schaltet immer ein Bild weiter. Eine Übersicht (Abbildung 2) über den vorhandenen Fotobestand, die sich per [Strg]+[S] auch speichern lässt, liefert zunächst der Befehl display vid:*.jpg.

Abbildung 1

Abbildung 1: An das Menü gelangen Sie über einen linken Mausklick auf das Foto, das kleinere Fenster hilft beim Navigieren in überdimensionalen Bildern.

Abbildung 2

Abbildung 2: Der Befehl "Display" erstellt einen Überblick über die geschossenen Fotos.

Über das Kommando identify bild.jpg entlocken Sie einem Foto tiefer gehende Informationen. Der Befehl liefert im Terminalfenster eine Reihe von etwas kryptischen Informationen zum Foto bild.jpg. Im Beispiel aus Abbildung 3 handelt es sich um eine JPEG-Datei, die eine Auflösung von 3264x2448 Pixel aufweist, wobei jeder Farbkanal 8 Bit Farbinformationen speichert. Bei drei Farbkanälen (für Rot, Grün und Blau) ergibt das eine Farbtiefe von 24 Bit. Der letzte Wert nennt noch die Dateigröße. Die in vielen Fotos versteckten EXIF-Informationen kramt der Parameter -verbose hervor:

$ identify -verbose bild.jpg

Haben Sie alle unerwünschten Fotos identifiziert und gelöscht, geht es im zweiten Schritt an eine Aufbereitung für die Homepage.

Eingemachtes

Für gewöhnlich liefert die Kamera die Fotos im JPEG-Format, das einen gravierenden Nachteil besitzt: Um eine hohe Kompression zu erreichen, wirft JPEG Bildinformationen über Bord. Das rächt sich, sobald Sie weitere Filter und Effekte auf die Fotos loslassen. Haben Sie Pech, hinterlassen diese Änderungen unerwünschte Artefakte im Bild. Wollen Sie die Urlaubsfotos also noch nachbearbeiten, wandeln Sie diese zunächst in ein unkomprimiertes Format um. Fotografen mögen etwa das TIFF-Format, zu dem der Befehl convert bild.jpg bild.tiff verhilft. Um viele Dateien in einem Rutsch zu überführen, hilft ein Shell-Befehl:

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

Für jede Datei mit der Endung .jpg schneidet die Shell dem Dateinamen die Endung ab, hängt dafür ein .tiff an und ruft mit dem Ergebnis convert auf.

Wie alle seine Brüder aus dem Imagemagick-Paket erkennt convert das Dateiformat selbständig an der Endung. Jedes Programm weiß automatisch, dass es sich bei bild.jpg um ein Foto im JPEG-Format handelt. Benötigen Sie eine exotische Endung, weil die konvertierte Datei etwa exot.exo heißen soll, stellen Sie das Format einfach dem Dateinamen voran:

$ convert bild.jpg TIFF:exot.exo

In der Runde

Auf der Seite liegende Bilder bringt mogrify zusammen mit dem Parameter -rotate wieder in eine aufrechte Sitzposition. So rotiert der Befehl:

$ mogrify -rotate "90>" bild.tiff rotiert.tiff

die Abbildung bild.tiff um 90 Grad im Uhrzeigersinn. Die Anführungszeichen brauchen Sie, da ansonsten die Shell die spitzen Klammern als Umleitung interpretieren und bild.tiff löschen würde.

Filterkaffee

Über eine Reihe von Effekten und Filtern können Sie die Bilder nachträglich verändern oder aufpeppen. Als sehr hilfreich erweist sich in vielen Fällen der Scharfzeichner:

convert -sharpen 6 bild.tiff scharf.tiff

Die Zahl hinter dem Parameter -sharpeb gibt an, wie stark der Filter wirkt. Zu dunkle Fotos lassen sich mittels convert ebenfalls schnell und schonend aufhellen:

$ convert bild.tiff -sigmoidal-contrast 4,0% helleresbild.tiff

Wirkt ein Bild nicht so stimmungsvoll wie ursprünglich erhofft, dann konvertieren Sie es doch probeweise einmal in ein Schwarzweiß-Foto:

$ convert bild.tiff -colorspace gray schwarzweiss.tiff

Diese Form der Umwandlung liefert allerdings in einigen Fällen nur ein recht flaues Ergebnis. Als beliebter Trick gilt in diesen Fällen die Verwendung eines Farbkanals:

$ convert bild.tiff -channel R -separate schwarzweiss.tiff

Das obige Kommando extrahiert den Rot-Kanal des Bildes, dessen Intensitätswerte wiederum als Graustufen im fertigen Bild landen. Neben den gezeigten Brot- und Butter-Effekten existieren noch ein paar Spielereien. Beispielsweise führt

$ convert bild.tiff -charcoal 5 kohlebild.tiff

zu einer "Kohlezeichnung". Der Wert hinter -charcoal bestimmt dabei die Härte des "Kohlestifts". Ein Negativ produziert der Parameter -solarize (Abbildung 3), einen Strudel erzeugt -swirl (Abbildung 4) und ein -implode lässt das Bild implodieren.

Abbildung 3

Abbildung 3: Der Solarisationseffekt erzeugt ein Negativbild. Der praktische Nutzen der meisten Filter hält sich in Grenzen …

Abbildung 4

Abbildung 4: … aber die erzeugten Effekte sehen durchaus witzig aus. Hier dreht der Swirl-Effekt das Bild durch den Mixer.

Wasserzeichen

Bevor Sie das Ergebnis auf die Homepage hieven, schieben Sie dem Bilderklau einen Riegel vor und versehen Sie Ihre Fotos mit einem Wasserzeichen. Dazu erstellen Sie zunächst ein Logo und platzieren es beispielsweise in der linken oberen Ecke:

$ composite -geometry +100+100 logo.png foto.tiff foto_logo.tiff

Dieser Befehl kopiert das Bild aus logo.png an die Position 100, 100 in das Bild foto.tiff und legt das Ergebnis in der Datei foto_logo.tiff ab (Abbildung 5).

Abbildung 5

Abbildung 5: Tux schwebt hier als etwas zu groß geratenes Logo über dem Foto.

Das so eingefügte Logo markiert zwar die Herkunft, sieht allerdings noch nicht besonders nach einem typischen Wasserzeichen aus. Abhilfe schafft der eigens für diesen Zweck geschaffene Parameter -watermark:

$ composite -watermark 30% -gravity south logo.png foto.tiff mitwasserzeichen.tiff

Hier bestimmt die Prozentangabe, wie stark das Wasserzeichen durchscheint. Mit composite binden Sie übrigens nicht nur Logos und Wasserzeichen ein, sondern erstellen auch im Handumdrehen beliebige Collagen. So lassen Sie im Urlaubsfoto einen Pfeil aus einer zweiten Bilddatei auf die kleine Skihütte im Hintergrund verweisen – am besten mit einem passenden Text.

Namenstag

Bildunterschriften klären den Betrachter über den genauen Ort der Aufnahme oder die abgelichteten Personen auf. Dazu benötigen Sie zunächst eine Datei mit der gewünschten Schriftart, vorzugsweise im TrueType-Format (Endung .ttf). Unter KDE und Gnome spüren Sie die Schriften mit Suchhunden wie Tracker oder Beagle auf. Dann ist wieder einmal convert an der Reihe, dem Sie hinter -font die Lagerstätte der Schriftart übergeben. Den etwas länglichen, kompletten Befehl zeigt Listing 1.

Listing 1
$ convert -font @/home/tim/schriften/font.ttf -pointsize 20 -fill black -draw "text 100, 150 'Urlaub in den Bergen'" bild.tiff mittext.tiff

Der Klammeraffe vor dem Dateinamen verrät convert, dass es sich um eine TrueType-Schrift handelt. Der Rest des Befehls setzt den Text Urlaub in den Bergen (-draw) an der Stelle 100, 150 in schwarzer Farbe bei 20 Pixeln Größe (-pointsize 20) und in der Schrift font.ttf. Die Farbe nach -fill tippen Sie mit dem (englischen) Namen ein, etwa red, oder übergeben direkt die entsprechenden RGB-Werte. Im zweiten Fall wählen Sie zwischen der dezimalen Schreibweise, also beispielsweise rgb(255,0,0), oder der hexadezimalen "#FF0000", die Sie vielleicht auch aus der HTML-Programmierung kennen. In beiden Fällen erhalten Sie die Farbe Rot. Der Befehl convert -list color nennt alle bekannten Farbnamen und deren RGB-Werte.

TIPP

Anstelle des Dateinamens können Sie auch den Namen der Schriftart, wie zum Beispiel Courier verwenden.

Das ist aber noch nicht alles, was Imagemagick mit Text anstellen kann. Beispielsweise versehen Sie ihn mit einer Rahmenlinie und grüner Füllung. Dies erledigen die Parameter -stroke für die Umrandung und -strokewidth für dessen Strichstärke (Listing 2).

Listing 2
convert -font @/home/tim/schriften/font.ttf -pointsize 20 -fill red -stroke black -strokewidth 3 -draw "text 100, 150 'Urlaub in den Bergen'" bild.jpg mittext.tiff

TIPP

Einige Parameter kennen mehrere der Imagemagick-Werkzeuge. So textet beispielsweise composite nach dem gleichen Verfahren wie convert.

Rahmenhandlung

Wer es bei der Gestaltung seines Fotoalbums etwas dekorativer mag, der darf seine Bilder noch einrahmen. Dies klappt schnell per:

$ convert -bordercolor blue -border 10x10 bild.tiff mitrahmen.tiff

Der Befehl liefert ein Bild mit einem Rahmen (-border), der 10x10 Pixel breit ist. Er besitzt die Farbe hinter bordercolor – im Beispiel also Blau. Der zusätzliche Schalter +polaroid biegt das Bild so zurecht, dass es wie ein eingeklebtes, sich leicht wellendes Foto aussieht (Abbildung 6):

$ convert -bordercolor snow -background black +polaroid bild.tiff polaroidfoto.tiff
Abbildung 6

Abbildung 6: Über den Schalter -polaroid lassen Sie Bilder aussehen, als wären sie mit einer Polaroid-Kamera geschossen worden.

Um einen dreidimensionalen Rand zu zeichnen weichen Sie auf den Parameter -frame aus. Er versieht das Bild ebenfalls mit einem Rahmen, erlaubt aber eine feinere Steuerung als -border. Die Farbe des Randes regelt dabei der Schalter -mattecolor:

$ convert -mattecolor peru -frame 9x9+3+3 bild.tiff bildmit3drahmen.tiff

Die beiden Zahlen hinter den Pluszeichen bestimmen die Breite für den inneren und äußeren Rand des Bilds.

Schrumpfkopf

Stimmen die Effekte, arbeiten Sie die Fotos für das Internet auf. Zunächst sollten Sie ihre Größe etwas reduzieren. Monster mit einer Auflösung von 3264x2448 Pixel passen nur mit einer kleinen Ecke auf die meisten Monitore und verschlingen zudem unnötig Plattenplatz. Die Pfunde purzeln lässt die Option -resize:

$ convert -resize 200x200 foto.tiff kleinesfoto.png

Der Befehl verkleinert foto.tiff auf eine Größe von 200x200 Pixel – oder besser gesagt: er versucht es. Um Verzerrungen zu vermeiden, orientiert sich convert lediglich an den angegebenen Maßen. Ein 3264x2448 großes Ausgangsbild misst somit hinterher 320x100 Pixel. Soll das Bild unbedingt 200x200 Pixel groß sein, auch wenn es anschließend verzerrt aussieht (Abbildung 7), setzen Sie ein Ausrufezeichen hinter die Größenangabe:

$ convert -resize 200x200! foto.tiff kleinesfoto.png
Abbildung 7

Abbildung 7: Das Haus wurde in 200x200 Pixel gepresst.

Alternativ dürfen Sie auch mit Prozentangaben arbeiten. Das folgende Beispiel verkleinert das Bild auf drei Viertel seiner ursprünglichen Größe:

$ convert -resize 75% foto.tiff kleinesfoto.png

Um sämtliche Urlaubsfotos bequem auf einen Schlag in platzsparende Thumbnails zu verwandeln, hilft wieder der Einsatz der Shell:

$ for i in *.tiff; do convert $i -resize 800x600 $(basename $i .tiff).png; done

Der Befehl reduziert die Größe der Bilder auf monitorfreundliche 800x600 Pixel und konvertiert sie obendrein gleich noch ins platzsparende PNG-Format – Omas altes Modem kann aufatmen.

Daumennagel

Die zukünftigen Besucher der Homepage wollen vermutlich nicht alle Fotos sehen. Die Oma aus dem Sauerland etwa interessieren vor allem Landschaftsfotos. Richten Sie daher zunächst eine Übersicht mit Thumbnails ein, die auch ausgedruckt gute Dienste leisten: Verlangt ein Verwandter einen Abzug auf Papier, finden Sie das Exemplar schnell in der Übersicht wieder. Um die Zusammenstellung kümmert sich montage, das mit Vorliebe Thumbnails bastelt:

$ montage -label '%f' *.png -frame 5 uebersicht.png

Dieser Befehl legt um jedes Vorschaubild einen Rahmen, schreibt den Dateinamen darunter (-label '%f') und packt schließlich die fertigen Kandidaten in die Datei uebersicht.png. Das Ergebnis ist ein mehr oder weniger großes Poster, wie in Abbildung 8.

Abbildung 8

Abbildung 8: Diese Übersicht erstellt montage, wobei es die Fotos automatisch verkleinert.

Starschnitt

Auf der Homepage jedoch soll ein Klick auf eines der Vorschaubilder zum kompletten Foto führen. Auch das schafft Imagemagick spielend, wenn auch auf einem kleinen Umweg über Visual Directorys. Sie enthalten kleine Vorschaubilder, die dann per Mausklick das jeweilige Foto in seiner ganzen Pracht hervorzaubern. Ein Visual Directory erstellen Sie mittels convert vid:*.png meindir.vid, das Ergebnis öffnet display meindir.vid. Um ein Foto zu betrachten, wählen Sie aus dem Kontextmenü der rechten Maustaste Load.

Visual Directory erzeugt über den Befehl convert 'vid:*.png' HTML:index.html auf Wunsch auch eine komplette Vorschauseite für Ihre Homepage. Das Ergebnis besteht aus mehreren Dateien. Dabei enthält index.png die eigentliche Übersichtsgrafik, index.html bindet diese ein und teilt dem Browser mit, hinter welchem Vorschaubild welches Foto steckt. Stellen Sie die beiden Dateien zusammen mit den richtigen Fotos auf einen Web-Server. Sobald ein Besucher die index.html aufruft, sieht er eine Übersicht der vorhandenen Fotos. Klickt er auf eines der Vorschaubilder, lädt sein Browser schließlich das große, richtige Bild.

Fazit

Die Werkzeuge aus dem Imagemagick-Paket besitzen eine recht gewöhnungsbedürftige und mitunter auch recht kryptische Syntax. Eine Einarbeitung lohnt sich jedoch, wenn Sie große Bildmengen auf wiederkehrende Weise manipulieren wollen. Shell-Skripte bieten dann fast unbegrenzte Automatisierungsmöglichkeiten.

Tip a friend    Druckansicht beenden Bookmark and Share
Kommentare
Ubuntu will nicht...
Martin (unangemeldet), Freitag, 13. November 2009 19:37:10
Ein/Ausklappen

Mit Ubuntu 9.04 funktioniert keines der Beispiele...


Bewertung: 173 Punkte bei 19 Stimmen.
Den Beitrag bewerten: Gut / Schlecht