Hannes Birnbacher, Windhagen/Ww.

Bildbearbeitung mit ImageMagick

Vorbemerkung: Dies ist ein kurz gehaltener "Waschzettel im Web" mit meinen Notizen, welche der Möglichkeiten von ImageMagick als Ergänzung zu Bildbearbeitungsprogrammen wie GIMP mir für die Verwaltung und Aufbereitung von Foto-Dateien nützlich sein können. Meine Beschreibung gilt für die Linux-Version.

Was ist ImageMagick?

ImageMagick ist eine Sammlung von vielen einzelnen Funktionen zur Bildverarbeitung, die es bei http://www.imagemagick.org kostenlos für Windows und Linux herunterzuladen gibt. Das Hauptprogramm wird mit "display" aufgerufen, evtl. mit einer Bilddatei, und zeigt bei Rechtsklick mit der Maus ein Menü von bescheidener Brauchbarkeit. Die Stärken der Software liegen in der Fähigkeit, durch Eintippen eines einzigen Befehls eine Arbeit an einer Vielzahl von Bildern zu vollbringen, anstatt sie einzeln in ein Bildbearbeitungsprogramm einladen und die Arbeitsschritte für jedes neu vollziehen zu müssen.
Anmerkung: Die alten Bilddateien werden überschrieben - also zum Testen auf Kopien arbeiten! Ferner kann Image Magick nicht rekursiv arbeiten, also nicht in einem Schritt Unterverzeichnisse oder eine ganze Festplatte ändern, im Gegensatz etwa zu Exiftools, an das nur ein "-r" anzuhängen ist (s.u.).

Alle Bilder in einem Verzeichnis auf eine maximale Breite oder Höhe von 480 Pixel ändern.

Das vorhandene Seitenformat (nehmen wir mal an, 3:4) soll erhalten bleiben. Hochformat sollen also 360x480 Pixel groß werden, Querformat 480x360 Pixel.
Beispiel: Wir wollen eine Anzahl 5-Megapixel-Aufnahmen unserer Digitalcamera für eine Homepage verkleinern.
Befehl: mogrify -resize 480x480 *
Soll Imagemagick nur größere Bilder verkleinern, aber nicht kleinere Bilder vergrößern, so fügt man ein Häkchen an die Dimensionen an. Damit dieses nicht als eine Ausgabeumleitung interpretiert wird, muss man die Dimensionsangabe in Hochkomma setzen.
Ein Befehl, um Platz zu schaffen und dennoch alle übergroßen Bilddateien auf Bildschirmgröße plus Reserve zu halten, könnte beispielsweise so aussehen:
mogrify -resize '1600x1600>' -quality 50 *.jpg

Dieses Beispiel ändert nur Dateien mit der Endung ".jpg" (Kleinschrift). Will man bestimmte Bilder ausnehmen wie überbreite Panoramafotos, könnte man sie auf eine andere Endung umbenennen wie *.JPG oder *.jpeg.
Hat man Digitalkameras oder Programme, die mal jpg, mal JPG, mal jpeg anfügen, und will das Durcheinander erst mal aufräumen? Linux-Nutzer können standardmäßig nicht einfach mit Wildcard (Sternchen) alles auf einmal umbenennen. Hierfür installiert man sich mmv (multiple move), der Befehl lautet dann:
mmv "*.JPG" "#1.jpg" .
Hinterher ist ekligerweise jedes Bilddatum auf das heutige gesetzt, also führt man den anderweitig schon erwähnten Befehl aus:
exiftool -r '-DateTimeOriginal>FileModifyDate' * -overwrite_original und hat wieder das Aufnahmedatum aus der Kamera als Datei-Datum stehen. Doch Vorsicht mit dem -r, der Befehl wirkt sich auch auf alle Unterverzeichnisse aus. Hat man z.B. einen Link auf eine ganze Archiv-Platte im Verzeichnis stehen, ist mit einer längeren und vielleicht ungewollten Bearbeitung zu rechnen. 

Hinweis:
ist eine Gesamtbreite von 480 Pixel erwünscht, dürfen Hochformat-Bilder aber höher werden, so lautet der Befehl: mogrify -resize 480 *.
Soll die Gesamthöhe auf 480 Pixel beschränkt bleiben, aber die Breite sich je nach Seitenverhältnis bestimmten, so lautet der Befehl: mogrify -resize x480 *.
Man sieht bei diesem Beispiel: das Sternchen steht hier als "Joker" für "Zeichenkette aller Art", der Buchstabe "x" für "mal", also 360 mal 480 oder auch 640 mal 480 Pixel.

Copyrightvermerk o.ä. in jedes Bild reinschreiben (Dateiname mit Wildcards), dabei das Original überschreiben

Ein besonderer Font wird nicht vorgegeben. Der Text soll 10 Pixel vom senkrechten, 50 Pixel vom waagerechten Rand beginnen, defaultmäßig von links oben gezählt. Er soll 10 Punkte hoch werden und in grauer Farbe erscheinen. Alle Bilddateien, die mit einem kleinen ".jpg" enden, sollen dabei erfasst werden.
Befehl: mogrify -pointsize 10 -fill gray -draw "text 10,50 'Copyright Hannes Birnbacher'" *.jpg
Anmerkung: 1.) Nicht die Hochkommata um den Text vergessen, sonst versucht das Programm, den drin stehenden Text auszuführen statt hinzuschreiben.
2.) Man kann reinschreiben, von welchen Ecken die Zählung ausgehen soll. Wie auf einer Landkarte gibt es Norden oben, Süden unten, Westen links, Osten rechts, also heissen die Ecken NorthWest, NorthEast, SouthWest, SouthEast. Der Befehl, um einen Copyrightvermerk links ziemlich weit unten einzusetzen, lautet also: mogrify -pointsize 10 -fill gray -gravity SouthWest -draw "text 10,20 'Copyright Hannes Birnbacher'" *.jpg.

Alle JPG-Bilder in einem Verzeichnis auf eine bestimmte Qualität (hier fünfzig Prozent) komprimieren und die alten Versionen überschreiben:

Von der Digikam (oder auch aus dem Internet) heruntergeladene Bilddateien haben zwar normalerweise das komprimierte JPG-Format, sind aber nicht besonders klein und natürlich wird der Fotograf seine Einstellungen sowieso so gesetzt haben, daß eine möglichst hohe Qualität bestehen bleibt, zu Lasten des Speicherplatzes. Kopiert man seine Dateien dann etwa in eine Bildergalerie, so brauchen sie bei einer Bildgröße von 4...5 Megapixel locker über ein Megabyte Speicherplatz (bzw. Bandbreite im Download...), obwohl man bei einer Kompression auf ein Viertel Megabyte keinen Unterschied sehen würde. Alle Bilder öffnen, um sie nur wegen der Kompression mit einem Bildbearbeitungsprogramm zu bearbeiten, ist viel zu viel Arbeit. Ein typischer Einsatzfall für ImageMagick. Mit dem nachstehenden Befehl wurde ein Testbild von 1.016.104 Bytes aus der Kamera auf 336.051 Bytes verkleinert - ohne, daß man den Unterschied sah.
Befehl: mogrify -quality 50 *.jpg
Haben wir von Bildschirmabdrucken oder bestimmten Programmen noch .png-Dateien (unkomprimierte Bilder) im Verzeichnis? Vorher den Befehl anwenden:
mogrify -format jpg *.png

und sie sind alle in .jpg umgewandelt.
rm *.png

befreit uns dann noch von den Originalen. (Vorsicht, ein kleiner Tippfehler, etwa nur das Sternchen ohne .png dahinter, löscht stattdessen alles in diesem Verzeichnis).

Ein Bild beschriften, das Original unverändert lassen und die beschriftete Version unter anderem Dateinamen abspeichern

ImageMagick - Copyrightvermerk

"Mogrify" ist der Befehl, um viele Dateien zu ändern und mit der neuen Version zu überschreiben. Bei Convert bezieht sich der Befehl auf eine Datei, und der Output kann in eine andere Datei geschrieben werden. Die Aufgaben lassen sich bei beiden auch kombinieren, z.B. in einem Arbeitsgang verkleinern und komprimieren.
Befehl: convert -pointsize 15 -fill gray -gravity SouthWest -draw "text 10,20 'Copyright Hannes Birnbacher'" 100_0729.jpg hemmerich.jpg
Anmerkung: convert ist der Universalbefehl für ziemlich alles.

Aus mehreren Bildern eines zusammensetzen (Tableau)

ImageMagick Tutorial Montage


Befehl:
 montage eins.jpg zwei.jpg drei.jpg vier.jpg -geometry +2+2 -resize 270x270  -frame 5  montiert.jpg
Dieser Befehl macht aus vier Bildern beliebiger Größe ein fünftes, hier montiert.jpg genannt. Die Optionen kann man weglassen, dann treten Defaults ein.
-geometry +2+2 (keine extra Leerstelle reinflicken!) legt fest, daß zwei Bilder nebeneinander und zwei Reihen übereinander erscheinen.
 -resize 270x270 bewirkt, daß die Bilder nicht den Default von 128 Pixel Breite einnehmen, sondern nur auf eine höchste Breite oder Höhe von 270 Pixel verkleinert werden.
-frame 5 macht einen 5 Pixel breiten Rahmen mit der Default-Farbe grau.

Nur zwei Bilder (z.B. zwecks eines Vergleichs) aneinanderfügen:

montage Bild1.JPG Bild2.JPG -geometry +2+1  -frame 5  Ergebnis.jpg

Bemerkung: Man experimentiere auch mit "-bordercolor white" etc. und mit "border" statt "frame".
Beispiel: Für eine Auktion darf ich nur eine Bilddatei hochladen, ich will aber mehrere kleinere Ansichten eines Gegenstandes zeigen.

Aus einer PDF-Datei alle Fotos herausziehen:

pdfimages -j Pdfdatei.pdf ./

Exif-Datum auch als Dateidatum einsetzen:

Nach dem Überspielen von Kamera auf den PC als auch nach jeder Bildbearbeitung wird das Datum der letzten Bearbeitung als Dateidatum gespeichert. Möchte man in einem Verzeichnis und allen Unterverzeichnissen das Aufnahmedatum als Dateidatum da stehen haben, hilft der Befehl:

exiftool -r '-DateTimeOriginal>FileModifyDate' * -overwrite_original

.


Einzeln kann man das bewerkstelligen mit touch -t JJJJMMDD0000 Dateiname.

Die Exif-Daten aus einer Bilddatei löschen:

exiftool -all= DATEINAME.JPG 


Im akuellen Verzeichnis und allen dessen Unterverzeichnissen einen Copyrightvermerk in allen Bilddateien eintragen:

exiftool -r -Copyright="Dies-wird-der-Copyrightvermerk" ./

Weitere Felder, die sich zur globalen Bearbeitung mit Exiftool anbieten, wäre UserComment, bei Fotoxx "Kommentar" genannt, um etwa in alle Bilder einer Aufnahmeserie das gleiche Event (wie "ILA Berlin 2014") einzutragen, oder Caption, bei Fotoxx "Titel" genannt, wenn alle Bilder in einem Verzeichnis denselben Aufnahmegegenstand zeigen (wie "Airbus A-380").

Bei allen Aktionen mit Exiftool sollte man dahintersetzen:

-overwrite_original 
um nicht die lästigen Sicherheitskopien auf der Platte zu haben.

Ist es dennoch passiert? (Gilt natürlich für alle Dateien, die man global nicht haben oder die man suchen wollte!)

Alle Dateien löschen, die im Namen einen bestimmten Begriff haben:

Erst einmal zur Kontrolle anzeigen lassen: find ./ -name '*SUCHSTRING'
und dann (Vorsicht, gefährlich), hier schon mit dem "_original" als Suchstring eingesetzt:
find ./ -name '*_original' -delete
Hiermit wird ohne Rückfrage alles gelöscht, was den Suchstring enthält (gibt man diesen also falsch oder gar nicht ein, wird die gesamte Platte gelöscht).

Alle Unterverzeichnisse mit einem bestimmten Namen auf der gesamten Platte löschen:

Mit dieser radikalen Funktion von "find" habe ich die Unterverzeichnisse ".thumbnails" löschen können, die mir das Programm "fotoxx" in der Voreinstellung ungewollt auf der gesamten Festplatte in jedem Verzeichnis angelegt hat, in dem sich Fotos befunden haben.
Unbedingt zuerst den Test mit der reinen Suchfunktion (nach dem Typ "Directory", also -d) laufen lassen:

find . -name .SUCHBEGRIFF -type d

Und hiernach kann man die Löschfunktion anhängen, wenn man sich traut:

find . -name .svn -type d -exec rm -r {} \;



Tipp: Unter Linux RAW-Dateien alle auf einmal in JPG-Dateien konvertieren

Ich habe das mit Geequie gemacht. Zuerst einmalig UFRAW in einem Terminal mit einem Raw-Bild als Parameter aufgerufen, unter links "Sichern" eingestellt "JPEG" (und andere evtl. gewünschte Ausgabeparameter), bei rechts unten "Optionen" auf "Konfiguration sichern" klicken.

Dann für UFRAW in Geequie dieTastenkombination, bei mir Ctrl-2, zugewiesen.

Jetzt eine Bilddatei oder mit Ctrl+a alle Bilddateien im Verzeichnis markieren, Ctrl-2 gedrückt und alle Bilddateien werden nacheinander konvertiert.


zurück zu "Computer"

Url dieser Seite: http://hannes-birnbacher.de/computer/imagemagick.html
Kurzlesezeichen: http://tinyurl.com/5syjo5