![]() |
Bilder mit ImageMagick bearbeitenProf. Jürgen Plate |
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.
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 357kbAuch 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:
Format | Funktion | Format | Funktion |
---|---|---|---|
%b | Dateigröße | %c | Kommentar |
%d | Verzeichnis | %e | Dateierweitertung |
%f | Dateiname | %h | Höhe |
%l | Beschriftung | %w | Breite |
%x | x Auflösung | %y | y Auflösung |
%# | Signatur | \n | Neue Zeile |
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
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.jpgIn 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.jpgZiehen 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.jpgDas 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.jpgDie Bilder landen in diesem Biespiel in den Dateien buidl-0.jpg, buidl-1.jpg, buidl-2.jpg ... buidl-25.jpg.
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.jpgDas 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.neuWeil 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.psDas 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.
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.jpgDieser 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.jpgBeim 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:
convert -rotate "90<" bild1.jpgEs gibt in ImageMagick auch vier einfache Möglichkeiten, Bilder zu spiegeln, ohne Drehwinkel angeben zu müssen. Dazu dienen die folgenden Optionen:
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.jpgWar 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.jpgAlternativ 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.jpgBei 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.jpgAlternativ 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.jpgMit 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.jpgHier 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.jpgDas 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.jpgDie 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.5991kbDie 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.jpgDas 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.jpgAllerdings 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
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.jpgDenselben Effekt erzielt man mit den Parametern -border 10x10 und für die Farbe -bordercolor "#BBBBFF".
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 | lessDie 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.ttfMeinst 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.jpgVersieht 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.
Option | Funktion |
---|---|
-font | Als Argument wird die gewünschte Schriftart übergeben, z. B. -font arial, -font helvetica oder -font /usr/share/fonts/truetype/Comic_Sans_MS.ttf |
-pointsize | Definition der Schriftgröße in Punkt, z. B. -pointsize 40. Eventuell etwas Experimentieren, bis es gut aussieht. |
-fill | Angabe der Schriftfarbe, z. B. -fill red. |
-draw | Position 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'" |
-gravity | gibt 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
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.jpgDie Farbsättigung über alle Farben kann als kombinierter Wert aus Helligkeit und Sättigung übergeben werden:
convert bild.jpg -modulate 100,25 bild_neu.jpg100 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.jpgBei flauen Bildern kann der Kontrast gesteckt werden, z. B.:
convert bild.jpg -set colorspace RGB -contrast-stretch 4x80% bild_neu.jpgNatü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.3Auch das Konvertieren eines Farbbildes in ein Schwarzweiß-Foto ist ganz einfach:
convert bild.jpg -colorspace gray bild_sw.jpgDiese 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.jpgDas 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.jpgUmgekehrt 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.jpgOder Sie vertauschen mal zwei Farbkanäle, z. B. rot und blau:
convert bild.jpg -separate -swap 0,2 -combine bild_neu.jpgEs 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.jpgein 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.
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.jpgDieser 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.jpgDie 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.
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.jpgOhne 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.jpgerstellt 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.jpgskaliert 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.jpgMittels -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
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 *.pngMöchte man dagegen aus bestehenden JPG-Bildern Vorschaubildchen machen, kann man beispielsweise folgendes Kommando verwenden:
mogrify -geometry 150x -quality 100 *.jpgAber 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 *.jpgAuch 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 *.jpgSoll 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 *.jpgWill 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'" *.jpgDas 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
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.
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.gifDas 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
Programm | |
---|---|
animate | spielt eine Serie von Bildern schnell hintereinander ab |
convert | Bilder einlesen, bearbeiten und speichern |
compare | vergleicht zwei Bilder und schreibt die Unterschiede in eine Bilddatei |
composite | fügt mehrere Bilder zu einem Bild zusammen |
conjure | führt Skripte in der Skriptsprache von ImageMagick aus |
display | stellt ein Bild auf einem X-Server dar |
identify | zeigt Dateiformat, Bildgröße und weitere Bildparameter an |
import | erzeugt Bildschirmfotos |
montage | fügt mehrere Bilder zusammen |
mogrify | funktioniert wie Convert, ersetzt aber das Ursprungsbild durch das Ergebnis |
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/.