Froschs Blog

Computer und was das Leben sonst noch so zu bieten hat

Zur Website | Impressum

Canon-Kameras, Python-PIL und die EXIF-Daten

12. Oktober 2022 um 19:23 Uhr von Atari-Frosch

Vorgestern Abend stieß ich auf ein … interessantes Problem.

Projekt: downscaler (Git-Repo: Downscaler; clonen geht derzeit noch nicht wieder, aber man kommt über den „snapshot“-Link an die Datei-Inhalte). Geschrieben in Python3 mit den externen Modulen PIL (pillow) und piexif.

Das recht einfache Python-Script rotiert die JPG-Dateien aus einem Verzeichnis (bei Bedarf) und skaliert sie dann – sofern das Original größer ist – so herunter, daß die breitere Seite 1200 px hat. Das Ergebnis wird unter demselben Dateinamen in ein anderes Verzeichnis gespeichert. Das Original wird dabei nicht verändert. So weit, so gut.

Bisher habe ich das beim Bearbeiten mit The GIMP direkt mitgemacht. Das bedeutet aber auch, daß ich selbst solche Fotos, an denen ich sonst gar nichts editieren will, in GIMP holen, ggf. rotieren, runterskalieren und wieder abspeichern muß. Sich wiederholende Tätigkeiten sollte man doch besser einem Computer überlassen, weil der das schneller kann, nicht wahr? 🙂

In der Zieldatei sollen die EXIF-Daten erhalten bleiben. Deshalb habe ich piexif dazugenommen, weil PIL EXIF-Tags zwar auslesen und anwenden kann, sie aber dann nicht wieder mit abspeichert, warum auch immer.

Ich verwendete dafür dieses Beispiel.

Meistens klappt das in dieser Kombination dann auch – aber nicht immer. Ich habe ein wenig experimentiert und herausgefunden, daß es davon abhängt, welches Gerät die Ursprungsdateien erzeugt hat, ob die EXIF-Daten tatsächlich in die Zieldatei mit eingespeichert werden:

device exif logfile
Canon CanoScan 9000F Mark II ja ja
Canon EOS 350D nein ja
Canon EOS 750D nein ja
Canon IXUS 160 nein ja
Canon Powershot A2000IS nein ja
Doogee X5pro ja ja
Fujifilm FinePix 2400 Zoom ja ja
HP PhotoSmart C30 ja ja
HTC Desire ja ja
Motorola 3.3 Mega Pixels DSC ja ja
Nokia 2.2 ja meistens
Panasonic DMC FZ20 ja nein
Reflecta x7-scan ja ja

Logfile: Bei den meisten Geräten werden bei Verwendung des Python-Moduls 'logging' die ganzen EXIF-Daten auch nochmal mit ins Logfile geklebt, obwohl ich das nirgendwo angegeben habe. Das bläst das Log gewaltig auf, und ich finde es „etwas“ nervig. Besonders lustig ist das ja bei Bildern vom Nokia 2.2 (Smartphone), da werden sie meistens mit reingeschrieben, aber manchmal auch nicht. Aber das ist insgesamt nur ein Nebenbei-Problem.

Ich konnte auch keinen Zusammenhang damit erkennen, daß die Bilder (aus allen Kameras/Scannern) teilweise vorher auch schon mit The GIMP bearbeitet wurden (der die ursprünglichen EXIF-Daten unangetastet läßt bzw. sich nur noch unter dem Tag „Software“ mit dazuschreibt).

Es fällt nun auf, daß die Dateien der aus den Canon-Kameras stammenden Bilder nach der Bearbeitung mit PIL allesamt keine EXIF-Daten in den Zieldateien haben, obwohl diese in den Ausgangsdateien – egal ob mit GIMP bearbeitet oder nicht – vorhanden sind. Diese Daten hätte ich aber da schon ganz gern weiterhin drin.

Genau genommen sieht das dann so aus:

$ exif 20130625-143032_2283.jpg
Beschädigte Daten
Die gelieferten Daten entsprechen nicht der Spezifikation.
  ExifMnoteCanon: Invalid zero-length tag size

Mir erschließt sich auch die Logik nicht – was macht die EXIF-Daten aus den Canon-Kameras so anders, daß piexif sie zwar liest und PIL sie anwenden kann, PIL sich dann aber weigert (übrigens ohne jegliche Fehlermeldung und ohne Log-Eintrag), sie wieder mit abzuspeichern?

Jemand 'ne Idee?


History

Ein Kommentar zu “Canon-Kameras, Python-PIL und die EXIF-Daten”

  1. Portabler Assembler quakte:

    Das geht mit Lightroom in 2min und auf alle CPU-Kerne parallelisiert. Ich mein das ist ja ein häufig vorkommendes Problem, dass das ggf. auch Darktable könnte.


Kommentieren

Bitte beachte die Kommentarregeln!

XHTML: Du kannst diese Tags verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>