Linux
Metadaten
Aktualisiert: 20. Juli 2008
Bild-Metadaten – Probleme und Lösungen
Nicht benötigte Metadaten entfernen
Für Archiverung eines Bildes oder dessen Veröffentlichung im Internet sollte man sich genau überlegen, welche Metadaten wirklich wichtig und für die eine spätere Identifizierung des Bildes wirklich notwedig sind. Hierzu zählen sicher alle technischen Metadaten wie das (äusserst wichtige) Datum der Aufnahme oder das Kameramodell, aber auch alle beschreibenden Metadaten wie Titel, Beschreibung oder Aufnahmeort des Bildes. Man muss also sicher stellen, dass die Metadaten nicht nur sauber und korrekt, sondern auch umfassend und am richtigen Ort und mit der richtigen Zeichenkodierung abgespeichert werden. Am wichtigsten ist wohl das Stichwort «umfassend»; falsch eingetragene Metadaten können zu einem späteren Zeitpunkt mit einem Bash-Skript relativ leicht ausgelesen und innerhalb des «Headers» verschoben werden.
Zu den nicht benötigten Metadaten gehört wohl der Photoshop-Bereich mit den darin befindlichen IPTC-Metadaten und die ebenfalls von den Adobe-Produkten angelegten ICC-Farbprofile. Da sich XMP in naher Zukunft wohl als neuer Standard duchsetzen wird, sollte dieser belassen werden. Bei schreiben von XMP-Metadaten mit dem «exiftool» ist zu beachten, dass das Programm wieder einen rudimentären Photoshop-Bereich einrichtet. Man sollte daher den Header erst nach Eingabe aller Metadaten mit folgendem Befehl säubern:
exiftool -overwrite_original -Photoshop:All= -ICC_Profile:All= (-XMP:All=)
Gefährliche Informationen in Metadaten
Nicht nur zur Reduzierung der Grösse einer Bilddatei für die eigene Website sollte man Metadaten entfernt. Ein anderer Grund ist, dass sich in den Metadaten äusserst sensible Informationen befinden können. So geschehen bei der amerikanischen Fernsehmoderatorin Cat Schwartz, welche auf ihrer Website eigentlich unscheinbare Foto von sich veröffentlichte, für deren Bearbeitung sie leider Programm eingesetzt hatte, welches das Exif-Vorschaubild nicht automatisch aktualisierte. Daher gab es offenbar mehr nackte Tatsachen zu sehen als ursprünglich gewollt. Ein weitaus schlimmerer Lapsus unterlief der «Washington Post», die im Februar 2006 ein Interview mit einem Computerhacker veröffentlichten durfte – unter der Bedingung, das weder sein Name noch sein Wohnort offenbart würden. Mit dem Artikel wurde auch ein verfremdetes Foto des Hackers veröffentlicht, in dessen IPTC-Metadaten jedoch die Namen sowohl des Bundesstaates als auch der Stadt, in der das Foto gemacht worden war, frei einsehbar waren.
Andere Metadaten können eine vergleichbare Gefahr darstellen: Das Exif-Datum «Standortkoordinaten (GPS) des Aufnahmeortes» erlaubt es, den genauen Standort festzustellen, an dem das Foto aufgenommen wurde. Das Exif-Datum «Entfernung, von der das Objekt fokussiert wurde» ermöglicht es, die exakte Position des Fotografen zu errechnen, wenn man den Standort des fotografierten Objektes kennt. Bei der Veröffentlichung von Fotos – insbesondere anderer Personen – ist also unbedingt auf die Bewahrung der Privatsphäre zu achten.
Probleme mit UserComment
Entgegen dieser offiziellen Definitionen lassen sich alle Felder scheinbar problemlos mit Unicode als Zeichensatz beschreiben, so z. B. mit Phil Harveys «exiftool», dem man ja explizit das Argument «-codedcharachterset=UTF8» mitgeben kann. Diese Felder können dann mit dem PHP-Befehl «exif_read_data» problemlos und in korrektem Unicode ausgelesen werden.
Äusserst seltsam ist allerdings, dass dies gerade mit dem Feld UserComment, welches gemäss den Spezifikationen als einziges mit Unicode beschrieben werden könnte, nicht funktioniert. Zwar schreibt der Befehl «exiftool -codedcharachterset=UTF8 -UserComment='НЕ БАЛУЙ' bild.jpg» allem Anschein nach Unicode korrekt in den Header, doch ist PHP nicht in der Lage, den etwas komplizierten Aufbau des UserComment richtig zu interpretieren.
Noch verwirrender ist allerdings, dass der Text in scheinbar korrekten Unicode ausgelesen wird, wenn man ihn mit dem PHP-Befehl «mb_convert_encoding» von ISO-8859-1 in UTF-8 umwandelt. Wohlgemerkt: der Text wurde ja bereits mit «exiftool» explizit als Unicode ins Feld UserComment geschrieben! Warum sollte man also UTF-8 als ISO-8859-1 einlesen und in UTF-8 umwandeln müssen? Diese Vorgehensweise ist beim Speichern des Feld UserComment in eine MySQL-Datenbank sogar zweimal nötig: einmal beim Einlesen selbst und dann sogar noch einmal beim Auslesen. Sehr seltsam! Der Vollständigkeit halber hier noch der Code:
$exifdata = exif_read_data ($image_name);
$keywords = mb_convert_encoding($exifdata['COMPUTED']['UserComment'], 'utf-8', 'iso-8859-1')
mysql_query ("INSERT INTO images SET keywords='$keywords'");
Probleme mit der Miniaturvorschau
Das Bearbeiten der integrierten Miniaturvorschau ist etwas knifflig und kann weder mit «jhead» noch mit dem «exiftool» alleine gelöst werden. «jhead» kann zwar ein Thumbnail regenerieren und qualitativ verbesseren, jedoch nur, wenn bereits ein Thumbnail-Bereich im Header vorhanden ist. Das «exiftool» hingegen kann ein Thumbnail nicht regenerieren, dafür aber einen leeren Thumbnail-Bereich erstellen. Eine saubere Lösung ist daher, beide Tools zu kombinieren. Dazu erstellt man ein schwarzes Bild mit dem Namen thumb.jpg (160x120 Pixel) in gleichen Ordner, in dem man auch folgendes kleines Script erstellt.
for i in `find . -iname "*.jpg"` do exiftool -overwrite_original -ThumbnailImage= $i exiftool -overwrite_original '-ThumbnailImage<=thumb.jpg' $i jhead -rgt $i done
Mit diesem Script werden – vom aktuellen Ordner ausgehend – rekursiv alle JPG-Bilder gesucht, ihre alten Miniaturvorschauen gelöscht (erster Aufruf ohne Inhalt), durch das schwarze Bild ersetzt (zweiter Aufruf mit thumb.jpg) und abschliessend mit «jhead» neu generiert. Die Option «-overwrite_original» verhindert das Erstellen einer Backupdatei und überschreibt einfach das Original. Das tolle daran ist, dass jetzt auch jene Bilder eine Miniaturvorschau bekommen, die vorher keine hatten (z. B. Scans). Da die Grösse der Miniaturvorschau von Kamera zu Kamera schwanken kann, müssen Sie ein wenig ausprobieren. Bei meiner Minolta Dimage 7 ist es z.B. problemlos möglich, ein schwarzes Bild mit 600x800 Pixel in den Header zu schreiben, doch wird von «jhead» daraus automatisch eine Miniaturvorschau von nur 160x120 Pixel generiert – vermutlich speziell zugeschnitten für das 1,8-Zoll-Display mit 122’000 Pixel.
Kleines Metadaten-Script
Das hier von «barmasse.org» präsentierte Bash-Script ist frei verfügbar und hilft bei der Bearbeitung und Verwaltung grösserer Bildbestände. Da es äusserst mächtig ist, sollte man unbedingt mit einer Kopie seines Bildarchivs – und nicht mit den Originalbildern! – arbeiten. Der einfachste Weg ist, sich das gesamte Bash-Script herunterzuladen, ein Testbild in den Ordner «bildersammlung» zu kopieren und das Script von der Shell aus mit «sh modifyexif.sh» zu starten. Nicht vergessen, dass sowohl die «exiftools» und «jhead» installiert als auch dem Ordner die eigenen Benutzer- und Schreibrechte zugewiesen sein müssen, damit das Ganze funktioniert. Viel Spass beim Testen!

