Mit exiftool Metadaten aus Bilddateien entfernen
Jeder redet darüber, private Daten schützen zu müssen, aber kaum jemandem ist bewusst, wo überall private Daten anfallen. Ein Beispiel, das vermutlich fast jeden betrifft sind Bilder, digitale Bilder, um genau zu sein.
Wovon professionelle Spiegelreflexkameras vor ein paar Jahren nur träumen konnten, ist heutzutage auch beim günstigsten Einsteiger-Smartphone der Standard: Geotagging. Geotagging bedeutet, dass in digitalen Bildern GPS-Koordinaten enthalten sind, die Ort und Zeit der Aufnahme direkt in der Datei speichern.
Für viele Anwendungen ist das auch ausgesprochen praktisch, allerdings sind solche Metadaten auch private Daten, sehr private sogar. Man macht ein Foto von seinem Lieblingsessen und postet das Bild in den Sozialen Netzwerken, und nebenbei den eigenen Wohnort gleich mit, oder den des Lebenspartners, oder die Adresse des Arbeitgebers (um nur einige Beispiele zu nennen).
Wäre es da nicht praktisch, eine Methode zu haben, um Bilder per Script so zu bearbeiten, dass sie hinsichtlich privater Daten “sicher” sind? Unter Linux ist das zum Glück kein Problem, doch noch mal zurück auf Anfang.
Das primäre Format, in dem die meisten Bilder heutzutage aufgenommen und geteilt werden, ist JPEG. JPEG ist ein effizientes, verlustbehaftetes, komprimiertes Format zu Speicherung digitaler Bilder, das seine Stärken vor allem bei Fotos ausspielt, und deshalb dafür so populär ist. Die meisten Bildformate haben dabei die Möglichkeit, Metadaten zu erfassen und direkt in der Bilddatei zu speichern. Bei JPEG- oder TIFF-Bildern reden wir hier von “Exif”. Exif ist ein Standard, der sogenannte “Tags” in die Bilder, die Metadaten über das Bild enthalten, schreibt. Dabei unterscheidet man zwischen Tags, die immer da sind, weil sie sich aus dem Bild bzw. der Datei selbst ergeben (z.B. Breite, Höhe, Auflösung, Dateigröße, etc.) und optionalen Tags, die in der Regel von der Kamera hinzugefügt werden, aber auch nachträglich editiert werden können (wie z.B. Autor, Datum, GPS-Koordinaten, Objektiv-Brennweite, Kommentare, etc.).
Auch wenn wir für eine Fotosammlung aus den Exif-Informationen deutlichen Mehrwert ziehen können, wollen wir aber eine einfache Möglichkeit haben, gewisse Metadaten zu entfernen. Etwa für Bilder die wir mit anderen teilen (auf welchem Wege auch immer).
Unter Linux stehen uns dafür mehrere Möglichkeiten zur Verfügung, eine sehr flexible bietet “exiftool”.
Unter Ubuntu installiert man das Tool mittels sudo apt install exiftool
oder sudo apt install libimage-exiftool-perl
. Das passende Kommandozeilentool dazu heißt einfach exiftool
. Will man sich einfach alle Tags anzeigen lassen, so geht das mit exiftool <dateiname>
(ohne die Klammern). Ein älteres Testbild von einer Handykamera gibt hierbei beachtliche 96 Zeilen Text aus. Bei einem Bild, bei dem alle optionalen Tags entfernt wurden, sind es gerade noch 23 Zeilen. Die meisten Dateimanager zeigen das auch direkt im Tooltip an, wenn man mit der Maus drauf zeigt.
Möchte man nun zum Beispiel alle Metadaten entfernen, die entfernbar sind, geht das mit exiftool z.B. so:
exiftool -all= <dateiname>
Das ist einfach, aber nur mäßig flexibel. Möchte man hingegen eine etwas feinfühligere Bearbeitung, und wirklich nur Geoinformationen entfernen, dann können wir Tags auch explizit angeben, dafür müssen wir aber erst einmal die Tags kennen, die wir entfernen wollen. Exiftool zeigt standardmäßig eine Beschreibung statt des eigentlichen Tags an, mit exiftool -s <dateiname>
bekommen wir aber auch die korrekten Tagnamen.
Zu dem, was uns hier interessiert, gehören unter anderem:
Marke (Kamera- oder Handyhersteller),
Model (Kamera-, bzw. Handymodell),
Software (Bildbearbeitungssoftware oder z.B. Firmware der Kamera),
ImageUniqueID (eindeutige ID des Bildes) und noch einige mehr.
Darüber hinaus die gesamten GPS-Tags (die wir glücklicherweise als Tag-Gruppe angeben können) und ggf. die ICC-Farb-Profil-Informationen, die - falls vorhanden - auch eindeutige Informationen und Herstellerangaben enthalten können, darüber hinaus aber eher unkritisch sind.
Zuletzt wären da noch die sogenannten Makernotes, in denen Hersteller oft verschlüsselt Eigenschaften ablegen
(Hdrp_makernote
).
Was man genau reduzieren möchte hängt stark davon ab, was die eigene Kamera in die Tags schreibt, wirklich “sicher” kann man nur sein, wenn man alle Tags entfernt. Wollen wir nun bestimmte Tags (oder Gruppen von Tags) entfernen, werden diese einfach nacheinander angegeben:
exiftool -Model= -Make= <dateiname> # Entfernt Kamera-Modell und -Hersteller
exiftool -geotag= -gps:all= -xmp:geotag= <dateiname> # Entfernt alle Tags und Tag-Gruppen, die GPS-Informationen enthalten
exiftool -all= <dateiname> # Entfernt alle entfernbaren Tags
Standardmäßig legt exiftool ein Backup der bearbeiteten Bilder im selben Ordner an und hängt “_original” an den Dateinamen an. Man kann dieses Verhalten aber auch beeinflussen, indem man entweder das Original per Option verwirft, oder einen anderen Ort für die Ausgabe angibt (-o OUTFILE
).
Nachdem wir etwas mit exiftool herum gespielt haben, könnten wir jetzt ein kleines Script schreiben, aber das ist im täglichen Leben etwas sperrig. Besser wäre es, wenn unserer favorisierter Dateimanager diese Optionen direkt in seinem Kontextmenü zur Verfügung stellen würde, und genau das ist hier unser Ziel.
Die nachfolgende Beschreibung zielt zwar auf den Dolphin-Dateimanager unter KDE/Plasma ab, aber das kann auf jeden anderen Dateimanager relativ leicht angepasst werden.
Dolphin verwendet definierte Pfade, in denen die sogenannten Services-Menus definiert sind, in der Regel einen fürs System und einen für den eigenen User:
tux@linux~$ kf5-config --path services
/home/tux/.local/share/kservices5/:/usr/share/kservices5/
Vermutlich wird der Ordner im lokalen Home dafür noch nicht existieren, also wird der zuerst angelegt:
mkdir -p ~/.local/share/kservices5
Anschließend wird darin ein Service-File erzeugt, wir benennen unser Tool ganz kreativ “unExif” und bearbeiten es mit dem Texteditor der Wahl:
nano ~/.local/share/kservices5/unexif.desktop
Folgender Inhalt wird eingefügt:
# "unexif" or "libimage-exiftool-perl" has to be installed for this to work
[Desktop Entry]
Type=Service
ServiceTypes=KonqPopupMenu/Plugin
MimeType=image/jpeg;image/tiff;
Actions=unexifStripAll;unexifStripAllToDir;unexifStripGeo;unexifStripGeoToDir;
X-KDE-Priority=TopLevel
X-KDE-Submenu=unExif
X-KDE-StartupNotify=false
[Desktop Action unexifStripAll]
Name=Alle Exif-Tags entfernen
Icon=remove
Exec=exiftool -all= %f
[Desktop Action unexifStripGeo]
Name=GPS Exif-Tags entfernen
Icon=remove
Exec=exiftool -geotag= -gps:all= -xmp:geotag= %f
[Desktop Action unexifStripAllToDir]
Name=Alle Exif-Tags entfernen (Unterordner)
Icon=folder-add
Exec=exiftool -all= %f -o unexif/%n
[Desktop Action unexifStripGeoToDir]
Name=GPS Exif-Tags entfernen (Unterordner)
Icon=folder-add
Exec=exiftool -geotag= -gps:all= -xmp:geotag= %f -o unexif/%n
Speichern, schließen, fertig. Man kann dieses Script anpassen, wie man möchte und weitere Einträge hinzufügen. Dabei gilt zu beachten, dass %f
eine einzelne Datei referenziert (damit Aufrufe pro Datei geschehen und nicht alle Dateinamen zu einem Argument für einen gemeinsamen Aufruf werden. Dafür würde man %F
benutzen), und %n
steht für den Dateinamen selbst (ohne Ordner). In diesem Beispiel gibt es eigentlich nur zu beachten, dass schon existierende Dateien NICHT überschrieben werden würden, falls sie schon existieren.
Man könnte diese Limitierung einfach umgehen, indem man z.B. einen Zeitstempel an den Dateinamen anhängt.
Und nun viel Spaß damit.
PS: Jetzt, wo Sie die Privatsphäre über Ihre Bilder zurück erlangt haben, können Sie sich der Privatsphäre Ihrer ausgedruckten Dokumente widmen. Denn Ihr Drucker markiert (https://de.wikipedia.org/wiki/Machine_Identification_Code) jedes Dokument eindeutig mit Datum und der Seriennummer des Druckers, aber das ist ein Tipp für ein anderes Mal…
Ein Tipp von Kai