Linux
Metadaten
Aktualisiert: 13. November 2008
Exif-Metadaten mit Phil Harveys «exiftool» manipulieren
Aus den wenigen Linux-Werkzeugen zur professionellen Nachbearbeitung von Bild-Metadaten sticht Phil Harveys «exiftool» ohne Zweifel durch seine fast undendlichen Optionen heraus. Im Folgenden sollen nur jene Option kurz aufgezeigt werden, welche für die Bildarchvierung und die Verarbeitung für eine Online-Präsentation (z. B. mittels PHP) von Bedeutung sind.
Zur Analyse der vorhandenen Bild-Metadaten bietet sich zuerst einmal der Befehl «exiftool -v bild.jpg», wobei der Option «-v» noch fünf Stufen der Verbosität mitgegeben werden können. Am übersichtlichsten ist «exiftool -v0 bild.jpg» (entspricht «exiftool -a bild.jpg»), welches sowohl Tagnamen als auch deren Inhalt (unicodefähig) darstellt. Der Aufruf «exiftool -v1 bild.jpg» zeigt die Metadaten in einer Baumstruktur mit Directories und deren Inhalt (nicht-unicodefähig) an. Und «exiftool -v5 bild.jpg» gibt den Header Bit für Bit aus. Um XMP-Metadaten in ihrer XML-Struktur darzustellen, kann «exiftool -xmp -b» benutzt werden.
Beschreibende Metadaten in den «Header» eintragen
Beschreibende Metadaten wie z. B. Bildtitel, Fotograf, Copyright, Schlüsselwörter oder eine Beschreibung kann man mit den «exiftool» nachträglich problemlos einfügen. Um sicher zu gehen, dass die gemachten Angaben auch am richtigen Ort geschrieben wird, sollte man den Bereich explizit mitgeben.
exiftool -Exif:ImageDescription='Petra (Jordan): The Treasury' exiftool -Exif:Artist='Camera owner, XX; Photographer, YY; Image creator, ZZ' exiftool -Exif:Copyright='Copyright, John Smith, 2008. All rights reserved.' exiftool -Exif:UserComment='Jordan, petra, trasury, archaeology' exiftool -Comment='Pictures of the left column of the Treasury in Petra, Jordan'
Will man seine Bilder in einer anderen Sprache als die englische beschriften, muss man wohl auf Unicode zurückgreifen. Man sollte Unicode eigentlich per definitionem verwenden, da es der Zeichensatz der Zukunft ist und auch für die spätere Verwendung im Internet weitau weniger Probleme beitet als ASCII oder Latin-1. Entgegen der Beschreibung in Exif Version 2.2, April 2002 kann man die Exif-Metadaten problemlos mit Unicode beschreiben.
exiftool -codedcharacterset=UTF8 -overwrite_original -Exif:ImageDescription='абвгд' exiftool -codedcharacterset=UTF8 -overwrite_original -Exif:Artist='αβγδε' exiftool -codedcharacterset=UTF8 -overwrite_original -Exif:Copyright='בגדהוז' exiftool -codedcharacterset=UTF8 -overwrite_original -Exif:UserComment='ابتثج' exiftool -codedcharacterset=UTF8 -overwrite_original -Comment='กขฃคฅ'
Mit dem obigen Zusatz «-codedcharacterset=UTF8» werden die Exif-Tags nun explizit mit Unicode geschrieben. Die Option «-overwrite_original» verhindert zudem das Erstellen einer Backupdatei und überschreibt das Original. Eine Überprüfung mittels «exiftool -v0 bild.jpg» zeigt, dass alles korrekt geschrieben wurde. Zu beachten ist hier, dass «Comment» bei TIFs nicht existiert!
Im Bild eingebettete Miniaturvorschauen manipulieren
Für die Veröffentlichung von Bildern im Internt ist es äusserst angenehm, dass der Exif-Standard das Schreiben einer integrierten Miniaturvorschau im Header des eigentlichen Bildes erlaubt. Dieses kleine Thumbnail wird von den Kameras hauptsächlich dazu benutzt, um eine schnelle Vorschau auf den eingebauten LCD-Monitoren zu ermöglichen. Dessen Grösse ist von Kamera zu Kamera verschieden und hat gemäss Exif Version 2.2, April 2002 auch keine Grössenbeschränkung. Mit dem exiftool lässt sich diese Miniaturvorschau problemlos manipulieren.
exiftool -b -ThumbnailImage image.jpg > thumbnail.jpg exiftool '-ThumbnailImage<=thumbnail.jpg' image.jpg
Der erste Befehl extrahiert die eingebettete Miniaturvorschau und speichert sie als thumbnail.jpg ab, der zweite Befehl schreibt sie wieder zurück in die Datei (die Anführungszeichen sind nötig). Zu beachten ist hier noch, dass einzig JPGs und PNGs Miniaturvorschauen im Exif-Header haben können, bei TIFFs ist es nur mit Photoshop möglich, ein (proprietäres) Thumbnail zu schreiben und zu lesen.
Ist die Qualität der Miniaturvorschau sehr schlecht, dann sollte man mit Hilfe von «convert» (Teil der «imagemagick» Tools) einfach eine neue Miniaturvorschau aus dem Originalbild heraus erstellen. Die drei nötigen Schritte kann man wunderbar in einer Pipe kombinieren (zum besseren Lesen umgebrochen).
exiftool -b -ThumbnailImage bild.jpg | convert jpg:- -geometry 160x120 -quality 90 jpg:- | exiftool bild.jpg -overwrite_original -ThumbnailImage'<=-'
Im Gegensatz zu «jhead» ist das «exiftool» nicht in der Lage, ein bereits vorhandenes Thumbnail zu regenerieren und qualitativ zu verbessern. Allerdings kann es einen leeren Thumbnail-Bereich anlegen, was ‹jhead› wiederum nicht kann. Die Kombination beider Programme löst jedoch fast jedes Probleme mit Miniaturvorschauen.
Defekte Header reparieren
Es kommt nicht selten vor, dass schlechte Software in Kameras und auf dem Computer Bild-Metadaten beim Abspeichern verstümmeln – auch vermeindlich «gute» Software von Adobe und Microsoft tut dies! «exiftool» ist in der Lage, kleinere Fehler im Header zu reparieren. Dazu muss man allerdings den gesamten Header des betreffenden Bildes mit dem Befehl in ein anderes, header-loses Bild auslagern.
exiftool -overwrite_original -all= bild_temporär.jpg exiftool -htmldump bild_defekt.jpg > header_defekt.html exiftool -F -tagsfromfile bild_defekt.jpg -all:all bild_temporär.jpg exiftool -htmldump 2.jpg > out_fixed.html
Zuerst wird mit dem ersten Befehl der gesamten Header von bild_temporär.jpg gelöscht, das später die reparierten Metadaten aufnehmen wird. Danach wird ein HTML-Output des gesamten Headers von bild_defekt.jpg erstellt, in welchem die Fehler in roter Farbe hervorgehoben sind. Sind Fehler vorhanden, dann liest der dritte Befehl den gesamte Header aus, korrigiert vorhandene Fehler (Option «-F») und kopiert alles in den leeren Header von bild_temporär.jpg hinein. Zuletzt wird auch von diesem Bild ein HTML-Output erstellt, um zu überprüfen, ob die Fehler korrigiert worden sind. Ist alles OK, kann man den Header auf gleichem Wege wieder in das Orignalbild zurückkopieren.
Meldet «exiftool» nicht nur kleine Fehler (Warnings), sondern gravierende (Errors), weist dies auf einen zerstörten Header hin, der nicht mehr repariert werden kann. Will man mit den Bild-Metadaten jedoch weiterarbeiten, muss der gesamte Header wohl oder übel komplett gelöscht werden. Dies geschieht entweder mit «exiftool -all= bild_kaputt.jpg» oder «jhead -purgejpg bild_kaputt.jpg».

