Bilder mit ImageMagick bearbeiten


Prof. Jürgen Plate

Bilder mit ImageMagick bearbeiten

ImageMagick ist ein Paket mit zahlreichen Programmen, die Screenshots erstellen, Bilder in verschiedene Formate konvertieren oder diese filtern, beschneiden, rotieren und sogar beschriften. Etliche Programme nutzen die ImageMagick-Funktionen und -Bibliotheken im Hintergrund und auch für diverse Programmiersprachen gibt es Bibliotheken. Mit dabei sind nicht nur ein Bildbetrachter (display), sondern auch zahlreiche Kommandozeilen-Tools, mit denen Sie beispielsweise Screenshots erstellen (import), die Bildgröße anpassen (convert), Grafiken in verschiedene Formate konvertieren, Bilder zusammenfügen (montage) und vieles mehr. Die einzelnen Befehle haben jede Menge Optionen, für die man öfter mal die Manual-Seiten oder die Dokumentation konsultieren muss, die aber Shell-typisch große Aufgaben mit kleinen Skripten beschleunigen und vereinfachen.

Hier kommt eine der großen Stärken von Linux und der Kommandozeile zum Tragen. Wo man bei Windows jedes Bild einzeln bearbeiten muss, um einen ganzen Ordner voller Bilder zu bearbeiten, kann man bei Linux wiederkehrende Vorgänge automatisieren und damit Bearbeitungsschritte nicht nur stark vereinfachen, sondern auch ganze Ordnerinhalte mit nur einem Befehl in wenigen Sekunden bearbeiten.

Bilddaten ermitteln mit identify

Informationen, wie Höhe, Breite, Dateigröße und Farbtiefe, ja sogar, ob ein Bild beschädigt ist, ermittelt man mit dem Kommando identify. Dem Kommando übergibt man wahlweise eine oder mehrere Dateien:

identify *.png
RasPi.png PNG 545x600 DirectClass 357kb 0.430u 0:01
   ...
Für etwas mehr Informationen wird die Option -verbose verwendet. So läßt sich schon mal die Größe eines Bldes ermitteln:
SIZE=$(identify $BILD | cut -d' ' -f3)
WIDTH=$(echo $SIZE | cut -dx -f1)
HEIGHT=$(echo $SIZE | cut -dx -f2)
Aber man muss gar keine Shell-Akrobatik betreiben, denn das Programm kann den Informationsfluss mit dem Parameter -format und weiteren Argumenten exakt kanalisieren. Die Option erinnert etwas an die Formatangaben von printf(). So steht das Formatelement %w für die Breite, %h für die Höhe, %b für die Dateigröße oder %f für den Dateinamen. Zum Beispiel:

identify -format "%f: %wx%h %b" RasPi.png
RasPi.png: 545x600 357kb
Auch EXIF-Daten lassen sich abfragen und verarbeiten, z. B. die Orientierung des Bildes, also Hoch- oder Querformat.
identify -format '%[exif:orientation]' Tante_Else.jpg

Die wichtigsten Formatkenner für den Parameter -format:

FormatFunktionFormatFunktion
%bDateigröße%cKommentar
%dVerzeichnis%eDateierweitertung
%fDateiname%hHöhe
%lBeschriftung%wBreite
%xx Auflösung%yy Auflösung
%#Signatur\nNeue Zeile

Bilder vergleichen mit compare

Wie stark sich zwei Bilder unterscheiden, findet der Befehl compare heraus. Das Programm vergleicht die beiden Bilder pixelweiseund erstellt ein Differenzbild, bei dem die indentischen Pixel weiss und die Unterschiede rot gefärbt sind. Mit compare kommt man nicht Veränderungen, sondern auch versteckten Botschaften (Steganographie) auf die Spur. Der Programmaufruf benötigt die Namen der beiden zu vergleichenden Dateien und der Differenzdatei, zum Beispiel:

compare bild1.jpg bild2.jpg diff.jpg

Bildschirmfotos anfertigen mit mit import

Unter Linux gibt es etliche Tools, mit denen Screenshots erstellt werden können. Eine schnelle Alternative zu grafischen Snapshot-Programmen bietet ImageMagicks Befehl import. Das Programm braucht mindestens einen Parameter, den Dateinamen für das Bildschirmfoto. Von der für die Datei gewählte Dateiendung leitet das Programm auch ab, in welchem Format Sie den Screenshot speichern wollen, z. B.:

import buidl.jpg
In diesem Fall würde ein JPG-Bild auf der Platte landen. Der Mauszeiger verwandelt sich nach dem Befehlsaufruf in eine Art Fadenkreuz: Klicken Sie in ein Fenster, wird das Bild des kompletten Fensters in der Datei abgelegt. Den gleichen Effekt erreichen Sie, wenn Sie den Namen in der Titelleiste wählen:
import -window 'Thunderbird' buidl.jpg
Ziehen Sie mit gedrückt gehaltener linker Maustaste einen Rahmen auf, können Sie einen bestimmten Bereich im Bild festhalten. Auch dieser Ausschnitt kann auf der Kommandozeile festgelegt werden:
import -window root -crop 640x480-0+0 buidl.jpg
Das Programm erzeugt zwei kurze Signaltöne, einen zu Beginn des Imports, den zweiten, wenn die Datei abgespeichert ist. Soll zusätzlich auch den Fensterrahmen mit ins Bild, verwenden Sie die Option -frame. Wenn Sie den kompletten Desktop "abfotografieren" wollen, brauchen Sie nicht mühsam mit der Maus einen Rahmen um den ganzen Bereich aufziehen, sondern geben die Option -window root an (siehe Beispiel oben). import kann sogar mehrere Bildschirmfotos nacheinander machen. -snaps legt die Anzahl fest, -pause die Pause (in Sekunden) zwischen zwei Bildschirmkopien.
import -window root -snaps 25 -pause 10 buidl.jpg
Die Bilder landen in diesem Biespiel in den Dateien buidl-0.jpg, buidl-1.jpg, buidl-2.jpg ... buidl-25.jpg.

Bilder bearbeiten mit convert

Das Programm convert ist das Multitalent! Es konvertiert Grafikformate, erstellt PostScript-Dateien, beschriftet Bilder und wendet Filter an. Die Handbuchseite von ImageMagick verrät, welche Grafikformate unterstützt werden. Um aus einer Bitmap-Datei ein JPG-Bild zu erstellen, reicht schon der Aufruf

convert buidl.bmp buidl.jpg
Das Programm identifiziert Anhand der Dateiendung bei "buidl.jpg", in welches Format die Datei konvertiert werden soll; das Original bleibt natürlich enthalten. Möchte man der neuen JPG-Datei eine andere Endung verpassen, gibt man das Zielformatan:
convert grafik.bmp JPEG:grafik.neu
Weil convert auch ins PostScript-Format umwandelt, kann man auch schnell über die Kommandozeile Fotos ausdrucken. Dazu werden als Optionen die Papiergröße (-page A4) und gegebenenfalls die Position des Bildes angegeben, z. B.: +0+0 für die linke, obere Ecke. Für den Schwarzweißdrucker bietet sich die Option -monochrome an, um die Ausgabe umzuwandeln:
convert -page A4+0+0 -monochrome foto.jpg foto.ps
Das fertige PostScript-Dokument wird dann gedruckt. Aber die FOrmatkonvertierung ist nur die einfachste Übung von convert. Bilder lassen sich drehen, skalieren oder beschneiden. Bei etlichen dieser Operationen können Verluste entstehen, da nach der internen Konvertierung bei Formaten wie JPG etc. eine Neukompression des Bildes folgt, die mehr oder weniger verlustbehaftet ist.

Bilder drehen und spiegeln

Das Rotieren der Bilder auf der Kommandozeile ist recht einfach. Dazu dient der Operator -rotate x, wobei x die Drehung in Grad bestimmt. Der folgende Befehl dreht beispielsweise ein Foto um 90 Grad im Uhrzeigersinn:

convert -rotate 90 bild2.jpg bild2.jpg
Dieser Befehl überschreibt die Originaldatei; wollen Sie eine gedrehte Kopie, geben Sie einen anderen Dateinamen als letztes Argument an. Entgegen dem Uhrzeigersinn benutzt man negative Werte.

Zu beachten ist, dass bei Drehwinkeln die nicht durch 90 teilbar sind, die Bildgröße verändert wird, weil das Bild dann ja gewissermaßen auf einer Ecke steht und dann ein umschreibendes Rechteck gebildet wird. Zeigen läßt sich das, indem der Hintergrund eingefärbt wird:

convert -background blue -rotate 45 bild.jpg neu.jpg
Beim Drehen gibt es noch eine nette Erweiterung: Man kann anhand des Seitenverhältnisses bestimmen, ob das Bild gedeht werden soll oder nicht. Diese Option ist bei der automatischen Bildbearbeitung in Skripten nützlich. Dabei gilt: Zum Beispiel:
convert -rotate "90<" bild1.jpg
Es gibt in ImageMagick auch vier einfache Möglichkeiten, Bilder zu spiegeln, ohne Drehwinkel angeben zu müssen. Dazu dienen die folgenden Optionen:

Bilder skalieren und beschneiden

Sind Bilder zu groß bzw. zu klein oder sollen schnell Thumbnails von Fotos erstellt werden, kann dies mit den Optionen -resize oder -geometry erledigt werden. Dabei bleiben standardmäßig beim Skalieren die Proportionen erhalten, das Seitenverhältnis ändert sich also nicht. Zum Beispiel:

convert -resize 180x180 bild.jpg bild_small.jpg
War das Original beispielsweise 1024 x 768 Pixel groß, passt convert das Seitenverhältnis automatisch an und skaliert auf 180 x 135 Pixel. Soll das Foto auf jeden Fall auf 180 x 180 Pixel gebracht werden (wobei das Bild verzerrt wird), setzt man ein Ausrufezeichen hinter die Größenangabe:
convert -resize 180x180! bild.jpg bild_small_ugly.jpg
Alternativ versteht die Option -resize auch Prozentangaben statt einer genauen Pixelzahl. So erstellt das folgende Kommando einen Thumbnail von 70% der Originalgröße:
convert -resize 70% bild.jpg bild_small.jpg
Bei der Option -geometry kann auch nur die X- oder Y-Ausdehnung angegeben werden, z. B.:
convert -geometry 180x180 bild1.jpg bild1.jpg
convert -geometry x180 bild1.jpg bild1.jpg
convert -geometry 180x bild1.jpg bild1.jpg
Alternativ kann man auch eine Prozentangabe verwenden. Möchte man das Bild verzerren, muss, wie oben, ein Ausrufezeichen hinter die Größenangabe gestellt werden. Es versteht sich von selbst, dass sich alle Optionen kombinieren lassen; man kann also Formatumwandlung und Größenanpassung in einem Rutsch erledigen.

Beim Verkleinern von Bildern treten Verluste auf und das Programm convert versucht auch, das Bild zu "glätten" (bikubische Splines), damit Artefakte nicht zu sehr in Erscheinung treten. Deshalb ist es sinnvoll, das entstandene Mini-Bild zu schärfen:

convert -geometry 180x180 -sharpen 1 -quality 90 bild1.jpg bild1_small.jpg
Mit Hilfe der Option sharpen 1 wird das Bild wieder scharfgezeichnet. Anschließend wird es im JPG-Format mit der Qualitätsstufe 90 gespeichert. Für Vorschaubilder kann der gleiche Befehl verwendet werden:
convert -geometry 100x100 -sharpen 1 -quality 100 bild1.jpg bild1_thumb.jpg
Hier wird die höchste Qualitäts-Stufe 100 verwendet, weil das Bild so klein ist und damit nur wenig Bildinformationen enthält. Je kleiner das Bild, desto geringer sollte die Kompression sein, damit keine Artefakte entstehen.

Die Vorschaubilder haben in der Regel noch unterschiedliche Höhe und Breite, je nachdem ob sie breiter oder höher waren. Wollen wir gleichmäßig große Vorschaubilder erhalten z. B. 75 x 75 Pixel, brauchen wir die Option -crop:

convert bild.jpg -resize 160x160 -gravity Center -crop 80x80+0+0  +repage bild_mini.jpg
Das Bild wird auf auf 180 x 180 Pixel verkleinert (die Mini-Version soll 80 x 80 Pixel groß sein, weshalb zunächst auf die doppelte Größe verkleinert wird). Danach wird das Zentrum in die Mitte des Bildes gelegt und die Ränder gleichmäßig beschnitten, so dass die verkleinerte Version genau 80 x 80 Pixel groß ist und keine Bildverzerrungen auftreten.

Um nun nur einen Teil eines Bildes zu verarbeiten, kann man diesen aus dem Gesamtbild ausschneiden, z. B.:

convert bild.jpg -crop 400x400+200+100 +repage neu.jpg
Die Option hinter -crop gibt an, welcher Bereich aus dem Bild ausgeschnitten werden soll. Die Angabe 400x400+200+100 bedeutet, dass ein Bildbereich von 400 x 400 Pixeln ab der Position 200 Bildpunkte von Links und 100 Bildpunkte von oben ausgeschnitten wird. Mit der Option +repageentfernen wir beim Beschneiden aus dem Header des Bildes die Canvas- und Offset-Werte, die beim Beschneiden falsch stehen bleiben würden.

Manchmal muss man sehr große Bilder in Einzelbilder aufteilt. Die Option -crop teilt das Bild in so viele Kacheln gleicher Größe wie möglich. Die notwendigen Bilddateien werden automatisch erstellt. Das folgende Beispiel zeigt, wie man ein Bild in vier Teilbilder zerlegt:

convert gross.jpg -depth 16 temp.png     # Kopie temp.png erzeugen
convert temp.png -crop 50% temp_%d.png   # Aufteilen des Bildes in 4 Teile

# identify temp_*.png                    # Bildinformationen anzeigen lassen
temp_0.png PNG 320x240 640x480+0+0 DirectClass 16-bit 39.0457kb 
temp_1.png PNG 320x240 640x480+320+0 DirectClass 16-bit 46.9013kb 
temp_2.png PNG 320x240 640x480+0+240 DirectClass 16-bit 35.5341kb 
temp_3.png PNG 320x240 640x480+320+240 DirectClass 16-bit 39.5991kb 
Die Option -depth 16 legt die Farbtiefe genau fest. Die Angabe -crop 50% in Kombination mit der Angabe der multiblen Ausgabedateien (Formatangabe %d für fortlaufend Hochzählen) erzeugt genau vier Teilbilder.

Im folgenden Beispiel wird ebenfalls -crop verwendet. Es werden 75% des Bildes ausgeschnitten, wobei mit der Option -gravity und dem Versatz von +0+0 die Mitte des Bildes ausgewählt wird. Dieser Befehl schneidet also an den Rändern des Bildes 25% ab, egal wie groß das Bild ist.

convert bild.jpg -gravity Center -crop 75%x+0+0  +repage neu.jpg
Das Programm kann auch PDF-Dateien als Bilderfolge speichern. So kann man beispielsweise Votragsfolien als Bilderfolge in Netz stellen. Der folgende Aufruf erzeugt für jede Seite des PDF-Dokuments ein Bild. Die Bilder haben die Namen bild-1.jpg, bild-2.jpg, bild-3.jpg usw. Wird keine -density angegeben, nimmt convert 72 dpi.
convert -density 100 praesentation.pdf bild.jpg
Allerdings stützt sich hier convert auf Ghostscript, was auch installiert sein muss.

Umgekehrt kann man (statt den Acrobat zu verwenden) aus eine Bilderfolge eine PDF-Datei machen. Da per Default die PDF-Seitengröße sich an der Bildgröße orientiert, sollte man das Seitenformat fest vorgeben (z. B.: -page A4.

convert *.jpg -density 100 -page A5 fotoalbum.pdf

Bilder einrahmen

convert kann Bilder einrahmen. Der Parameter -mattecolor ist dabei für die Farbe des Rahmens bzw. des Hintergrundes zuständig. Wie für die Option -fill geben Sie als Argument einen Namen oder die RGB-Werte in Hexadezimal-/Dezimalform an, z. B.:

convert -mattecolor "#CCCCCC" ...
convert -mattecolor blue ...
Zusätzlich definieren Sie die Stärke des Rahmens in Pixeln. Um einen 10 Pixel breiten Rahmen um das Bild zu zeichnen, geben Sie beispielsweise das Kommando:
convert -mattecolor "#BBBBFF" -frame 10x10 bild.jpg bild_gerahmt.jpg
Denselben Effekt erzielt man mit den Parametern -border 10x10 und für die Farbe -bordercolor "#BBBBFF".

Schrift einsetzen

Mit convert lassen sich Bilder mit Text beschriften. Beispielsweise kann man mit wenigen Kommandos Fotos mit einem Wasserzeichen versehen. Die Beschriftungs-Option -font erwartet als Argument eine Schriftart, z. B. TrueType (Dateiendung .ttf). Um herauszufinden, welche Schriftarten auf Ihrem System installiert sind suchen Sie einfach nach Dateien mit der Endung ".ttf":

find / -name '*.ttf' 2>/dev/null | less
Die so gefundenen Schriften geben Sie entweder direkt über den Dateinamen mit der vollen Pfadangabe an, z. B.:
-font @/usr/share/fonts/truetype/Times_New_Roman.ttf
Meinst reicht aber einfach der Name: -font Arial. Die Schriftgröße bestimmt die Option -pointsize, und die Schriftfarbe die Option -fill. Hier wird entweder ein Name angegeben (blue, white usw.) oder die RGB-Werte in Hexadezimal- oder Dezimalform. Das Kommando convert -list color zeigt Ihnen eine Liste aller Farben an, die das Programm versteht. Entsprechend liefert convert -list font eine Liste der internen Fonts von convert.

Der Text wird mit der Option -draw platziert. Hier teilen Sie convert mit, was gezeichnet werden soll (in diesem Fall Text) und an welcher Stelle der Text im Bild auftaucht. Dazu ein Beispiel:

convert -font Arial -pointsize 20 -fill gray -draw "text 800,750 'Draft - VS-NFD'" bild.jpg bild_neu.jpg
Versieht das Bild mit dem Text "Draft - VS-NFD" in 20-Punkt-Arial an der Position 800,750 (ausgehend von der linken oberen Ecke). Das beschriftete Bild heißt bild_neu.jpg.

OptionFunktion
-fontAls Argument wird die gewünschte Schriftart übergeben, z. B. -font arial, -font helvetica oder -font /usr/share/fonts/truetype/Comic_Sans_MS.ttf
-pointsizeDefinition der Schriftgröße in Punkt, z. B. -pointsize 40. Eventuell etwas Experimentieren, bis es gut aussieht.
-fillAngabe der Schriftfarbe, z. B. -fill red.
-drawPosition und Text der Beschriftung. Die Positionsangabe erfolgt in Pixeln, ausgehend von der linken oberen Ecke(0,0). Alles zusammen wird in Apostrophe eingeschlossen, der Text wird in Anführungszeichen gesetzt, z. B. -draw "text 300,500 'Hello World'"
-gravitygibt den Bezugspunkt an, z. B. -gravity SouthEast. SouthEast beschreibt die Ecke rechts unten. Weitere OPtionen sind: North, East, South, West, NorthEast, NorthWest, SouthEast und SouthWest. -draw verwendet dies als Bezugspunkt.

Beispiele:

convert bild.jpg -gravity SouthEast -font Times-Bold \
  -pointsize 72 -draw "text 0,0 'Hallo Welt'" bild_neu.jpg

Einsatz von Filtern

Durch den Einsatz von Filtern kann die Bildqualität verbessert werden oder eslassen sich interessante Effekte hinzufügen. Scharf- oder Unschafzeichnen erreicht man mit den Optionen -sharpen bzw. -blur. Beide Optionen benötigen dann noch einen Faktor, der die Stärke der Schärfung/Vernebelung angibt.-normalize passt die Helligkeitsverteilung an:

convert -blur 2 bild.jpg bild_neu.jpg
convert -sharpen 6 bild.jpg bild_neu.jpg
convert -normalize bild.jpg bild_neu.jpg
Die Farbsättigung über alle Farben kann als kombinierter Wert aus Helligkeit und Sättigung übergeben werden:
convert bild.jpg -modulate 100,25 bild_neu.jpg
100 ist hier die Helligkeit in Prozent und 25 der Sättigungsgrad in Prozent.

Auch Helligkeit und Kontrast lassen sich gemeinsam oder getrennt einstellen:

convert bild.jpg -brightness-contrast 35 bild_neu.jpg       # Helligkeit: +35%
convert bild.jpg -brightness-contrast 0x30 bild_neu.jpg     # Helligkeit: +0%, Kontrast: +30%
convert bild.jpg -brightness-contrast -20x-30 bild_neu.jpg  # Helligkeit: -20%, Kontrast: -30%
Zu dunkle Fotos lassen sich ebenfalls aufhellen, indem der Kontrast erhöht wird:
convert -sigmoidal-contrast 4.0% bild.jpg bild_neu.jpg
Bei flauen Bildern kann der Kontrast gesteckt werden, z. B.:
convert bild.jpg -set colorspace RGB -contrast-stretch 4x80% bild_neu.jpg
Natürlich ist auch die Gammakorrektur implementiert:
convert bild.jpg -gamma 0.35 bild_neu.jpg             # Gammawert 0.35 (alle Farben)
convert bild.jpg -gamma 1.0,0.30,0.30 bild_neu.jpg    # Gammawert Rot: 1.0, Grün: 0.3, Blau: 0.3
Auch das Konvertieren eines Farbbildes in ein Schwarzweiß-Foto ist ganz einfach:
convert bild.jpg -colorspace gray bild_sw.jpg
Diese Form der Umwandlung liefert allerdings in einigen Fällen nur ein recht flaues Ergebnis, was man mit Helligkeit/Kontrast wieder verbessern könnte. Oft erweist sich die die Verwendung eines Farbkanals als günstiger:
convert bild.jpg -channel R -separate separate_red.jpg
convert bild.jpg -channel G -separate separate_green.jpg
convert bild.jpg -channel B -separate separate_blue.jpg
Das obige Kommando extrahiert die Farbkanäle des Bildes, deren Intensitätswerte dann als Graustufen im fertigen Bild landen. Farbauszüge helfen auch bei Bildverarbeitung und Mustererkennung. Der Default-Colorspace ist RGB. Wenn Sie CMYK-Kanäle extrahieren wollen, müssen Sie -colorspace CMYK explizit angeben:
convert bild.jpg -colorspace CMYK -channel K -separate separate_K.jpg
Umgekehrt lassen sich die (ggf. nachbearbeiteten) Farbauszüge wieder zu einem Farbbild vereinen:
convert separate_red.jpg separate_green.jpg separate_blue.jpg \
        -set colorspace RGB -combine -set colorspace sRGB bild_combined.jpg
Oder Sie vertauschen mal zwei Farbkanäle, z. B. rot und blau:
convert bild.jpg -separate -swap 0,2 -combine bild_neu.jpg
Es gibt nahezu unendlich viele weitere Möglichkeiten, etwas das Austauschen eines bestimmten Farbtons oder das Füllen des Hintergrunds mit Farben. Mittels -colorize 50,50,100 kann die Farbe mit den Werten für RGB geändert werden. Ähnliche Effekte erzielen Sie mit -modulate.

Weitere Effekte gehen schon in den "künstlerischen" Bereich. Beispilesweise erzeugt das Kommando

convert bild.jpg -charcoal 5 kohlebild.jpg
ein Bild, das wie eine Kohlezeichnung aussieht. Abhängig vom Faktor hinter -charcoal zeichnet das Tool mit einem dickeren oder dünneren Kohlestift. Ein Negativbild, eine Solaristion, produziert die Option -solarize, wobei ein Parameter festlegt, wie stark der Effekt sein soll, beispielsweise -solarize 50. Einen Strudel erzeugt man mit -swirl und -implode lässt das Bild implodieren.

Gerade bei den Filtern, die per Option -filter typ aufgerufen werden, kommt man nicht um die umfangreiche Dokumentation herum.

Wasserzeichen mit composite einbauen

composite ist ein spezielles Kommando, dessen Funktionen sich auch aus den anderen Programmen von ImageMagick aufrufen lassen. Es ermöglicht verschiedene Methoden zum Mischen und Überlagern von zwei oder mehr Bildern. Dieser Befehl ist sehr mächtig und kann viel mehr, als nur ein Wasserzeichen einblenden. Wie das Überlagern des Bildes mit Text geht, zeigt der vorhergehende Abschnitt. Es lassen sich dank composite Bilder auch kombinieren. Dazu erstellen Sie zunächst ein Logo oder Wasserzeichen und platzieren es beispielsweise in der linken oberen Ecke:

composite -geometry +100+100 logo.png foto.jpg foto_logo.jpg
Dieser Befehl kopiert das Bild aus logo.png an die Position 100, 100 in das Bild foto.jpg und legt das Ergebnis in der Datei foto_logo.jpg ab. Das so eingefügte Logo sieht aber noch nicht wie ein typisches Wasserzeichen aus. Abhilfe schafft die Option -watermark, die das einkopoerte Logo mehr oder weniger durchscheinend macht:
composite -watermark 30% -geometry +100+100 logo.png oto.jpg foto_logo.jpg
Die Prozentangabe legt fest, wie stark das Wasserzeichen durchscheint. Mit composite binden Sie übrigens nicht nur Logos und Wasserzeichen ein, sondern erstellen auch im Handumdrehen beliebige Collagen.

Bilder kombinieren mit montage

Der Befehl montage generiert aus einem ganzem Ordner oder einer angegebenen Menge von Bildern ein neues Bild mit einer gekachelte Ansicht der ausgewählten Bilder. Im einfachsten Fall reicht schon:

montage *.jpg bild_neu.jpg
Ohne weitere Angaben werden Standardeinstellungen verwendet und die Bilder auf 120 x 80 Pixel geschrumpft und in 128 x 126 Pixel großen Kacheln nebeneinander gesetzt. Gibt man Optionen an, beziehen diese sich immer auf das nächstfolgende Bild hinter der Option, daher ist es wichtig, wo die Option steht.
montage -geometry 800x600+2+2 -tile 6x4 *.jpg bild_neu.jpg
erstellt aus einem Bilder-Verzeichnis eine gekachelte Ansicht mit jeweils sechs Bildern pro Zeile und vier Zeilen übereinander. Dabei wird mittels -geometry die Größe der Bilder festgelegt und mit dem Zusatz +2+2 ein zwei Pixel breiter Rahmen um die Bilder gezogen.
montage -geometry 800x600 *.jpg bild_neu.jpg
skaliert die einzelnen Bilder auf eine Größe von 800 x 600 Pixeln. Die Größe des Montage-Bildes ergibt sich aus der Anzahl der kombinierten Bilder. Dagegen wird im folgenden Beispiel das gekachelte Endbild auf die Größe 1200 x 800 skaliert. Die Größe der einzelnen Bilder errechnet sich aus der Gesamtgröße des montage-Bildes:
montage *.jpg -geometry 1200x800 bild_neu.jpg
Mittels -label "Titeltext" kann ein Bildtitel vergeben werden und die Hintergrundfarbe kann mittels -background <color> definieren. Auch andere Optionen, die beispielsweise bei convert zum Einsatz kommen (-resize, -size oder -shadow) versteht Montage-Tool.

Um Photos ohne Rahmen, Abgrenzungen und in ihrer Originalgröße nebeneinander anzuordnen, verwenden Sie:

montage +frame +shadow +label -geometry 100% *.jpg bild_neu.jpg

Mehrere Dateien oder Ordner konvertieren mit mogrify

Um ganze Verzeichnisse auf einmal umzuwandeln, wird mogrify verwendet. So wandelt man mit dem folgenden Befehl ein komplettes Verzeichnis mit PNG-Bildern in JPG um. Dabei bleiben die PNG-Bilder erhalten, da sich ja die Dateiendung ändert:

mogrify -format jpg *.png
Möchte man dagegen aus bestehenden JPG-Bildern Vorschaubildchen machen, kann man beispielsweise folgendes Kommando verwenden:
mogrify -geometry 150x -quality 100 *.jpg
Aber Vorsicht! Da die Ursprungsdateien bereits die Endung ".jpg" besitzen, werden die bestehenden JPG-Bilder damit überschrieben, die Bilder nicht umbenennt! Daher sollte man stets vorher eine Kopie der Bilder in einen eigenen Ordner machen und dann erst mogrify darauf anwenden. Das Programm kennt auch alle Optionen und Möglichkeiten von convert, wendet diese nur auf viele Dateien an.

Angenommen, Sie wollen alle Bilder in einem Verzeichnis auf eine maximale Breite oder Höhe von 600 Pixeln ändern, wobei das vorhandene Seitenverhältnis (z. B. 3:4) erhalten bleiben soll:

mogrify -resize 600x600 *.jpg
Auch hier werden die alten Bilddateien überschrieben. Ist nur eine Gesamtbreite von 600 Pixeln erwünscht und dürfen Hochformat-Bilder auch höher werden, so lautet der Befehl:
mogrify -resize 600 *.jpg
Soll die Gesamthöhe auf 600 Pixel beschränkt bleiben, aber die Breite sich je nach Seitenverhältnis bestimmten, so lautet der Befehl:
mogrify -resize x600 *.jpg
Will man alle Bilder mit Text versehen, geht das genauso einfach. Der Text soll 10 Pixel von links, 50 Pixel von oben beginnen, 10 Punkte hoch sein und in grauer Farbe erscheinen:
mogrify -font Arial -pointsize 10 -fill gray -draw "text 10,50 'Entwurf'" *.jpg
Das Kommando, um einen Copyrightvermerk ziemlich weit links unten bei allen Bildern einzusetzen, lautet:
 
mogrify -font Arial -pointsize 10 -fill gray -gravity SouthWest \
        -draw "text 10,20 'Da Vinci fecit'" *.jpg

Bilder anzeigen mit display

Das Tool display dientdem Anzeigen von Bildern auf der X-Oberfläche. Darüber hinaus ist display ein komplettes Bildbearbeitungs-Frontend von Imagemagick. mit einer etwas rudimentären grafischen Oberfläche. Ein großer Teil der Einzeloperationen von convert lassen sich über eine Menüführung oder über Tasten interaktiv aufrufen. Eine umfangreiche ausführliche Erklärung über alle Funktionen von display liefert die Manpage.

Man kann also mit display seine Bilder bearbeiten, drucken und speichern, ebenso kann man die einzelnen Optionen erst einmal mit grafischer Unterstützung ausprobieren, wie sich die einzelnem Optionen der Grafiktools verhalten. display kann Bildinfos auch von der Standardeingabe lesen, wenn ihm das Format bekannt ist. So lassen sich die Ausgabebilder beliebiger Programme durch eine Pipe direkt an display übergeben und man kann sich das Ergebnis ansehen, ohne jedesmal das Ergebnisbild erst auf Platte zu speichern, um es anzeigen zu lassen.

convert bild.jpg -resize 50% gif:-  | display gif:-
gif:- bedeutet dabei, "gib die Daten im gif-Format auf der Standardausgabe aus. display erhält dieselbe Information und zeigt das Bild an.

Animationen ansehen und erstellen mit animate

Beim Gestalten oder Bearbeiten von animierten GIF-Bildern will man seine Zwischenergebnisse oder die fertige Animation ja auch anehen. display ist hier eher nicht so geeignet, und andere Programme zeigen eventuell nur das erste Bild der Animation. Mit animate lassen sich sowohl fertige Animationen, wie auch Einzelbilder als Animation auf einer X-Oberfläche anzeigen.

Mit den Tasten [<], [>], [ ], [?] und [F1] lassen sich auch die Geschwindigkeit ändern oder auf Einzelbildmodus umschalten, Bildinformationen ansehen oder Hilfe holen. Die rechte Maustaste öffnet ein Service-Menü, mit dessen Hilfe man vieles übersichtlich mit der Maus steuern kann. Mit einer Reihe von Optionen beim Start lassen sich dann noch einige Feineinstellungen oder Effekte erreichen. Das einfache Abspielen eines animierten GIF_bildes ist recht einfach:

animate datei.gif
Das folgende Kommando lässt eine Dia-Show aller JPG-Dateien im Verzeichnis ablaufen, Wobei jeweils eine Pause von zwei Sekunden zwischen den Bildern gemacht wird:
animate -delay 200 *.jpg

Übersicht der Imagemagick-Tools

Funktion
Programm
animatespielt eine Serie von Bildern schnell hintereinander ab
convertBilder einlesen, bearbeiten und speichern
comparevergleicht zwei Bilder und schreibt die Unterschiede in eine Bilddatei
compositefügt mehrere Bilder zu einem Bild zusammen
conjureführt Skripte in der Skriptsprache von ImageMagick aus
displaystellt ein Bild auf einem X-Server dar
identifyzeigt Dateiformat, Bildgröße und weitere Bildparameter an
importerzeugt Bildschirmfotos
montagefügt mehrere Bilder zusammen
mogrifyfunktioniert wie Convert, ersetzt aber das Ursprungsbild durch das Ergebnis

Sicherheit

Wer auf seiner Webseite die ImageMagick-Bibliothek zur Bildbearbeitung online einsetzt kann sich Probleme einahndeln, denn Angreifer können eine Sicherheitslücke (CVE-2016–3714, Mai 2016) in der Software ausnutzen, um beliebigen Code auf Server zu schieben. Viele Plugins bauen auf die Bibliothek auf, z. B. PHP, Ruby, paperclip und nodej. Sie sind daher auch gefährdet. Insbesondere Webseiten mit einem Bilder-Upload sind besonders bedroht, weil schon das Hochladen eines präparierten Bildes soll einen Übergriff einleiten können. Wer Bilder nur lokal bearbeitet und konvertiert und vor dem Einstellen auf einen Webserver prüft, ist sicher.

Es existieren zwei Möglichkeiten, sich zu schützen. Zum einen müssen Admins sicherstellen, dass alle Bild-Dateien mit den korrekten "magic bytes" beginnen (Gif-Bilder z. B. mit "GIF89"), die den Dateityp beschreiben. Hier hilft das Kommando file <dateiname>. Weiterhin sollten Sie eine Policy-Datei mit Restriktionen zu erstellen, um Anfälligkeiten von ImageMagick entgegenzuwirken. Diese muss bei der Standard-Installation im Ordner /etc/ImageMagick abgelegt werden. Ihr Inhalt lautet:

<policymap>
<policy domain="coder" rights="none" pattern="EPHEMERAL" />
<policy domain="coder" rights="none" pattern="URL" />
<policy domain="coder" rights="none" pattern="HTTPS" />
<policy domain="coder" rights="none" pattern="MVG" />
<policy domain="coder" rights="none" pattern="MSL" />
<policy domain="coder" rights="none" pattern="TEXT" />
<policy domain="coder" rights="none" pattern="SHOW" />
<policy domain="coder" rights="none" pattern="WIN" />
<policy domain="coder" rights="none" pattern="PLT" />
</policymap>
Siehe auch https://imagetragick.com/.

Links

Copyright © Hochschule München, FK 04, Prof. Jürgen Plate
Letzte Aktualisierung: