Seite 1 von 1

Binärdatei (jpeg) bearbeiten

Verfasst: Dienstag 20. Februar 2018, 22:38
von DB7WN
Hallo Spezialisten!
Ich möchte die Exif-Daten von jpeg-Dateien lesen und weiter verarbeiten.
Ich weiß, mit IRFAN-View und mit Windows-Datei-Eigenschaften kann man diese Daten lesen, aber nicht gut weiterverarbeiten. Außerdem reizt es mich, das mal "zu Fuß" zu machen.
Bisher hab ich mir angesehen, wie die Exif-Codierung funktioniert und hab das auch einigermaßen verstanden.
Ich muss zunächst die Position des Wortes "Exif" irgendwo an Anfang der Datei bestimmen. Von dieser Referenzposition kann man durch Abzählen der Bytes die verschiedenen TAGs finden. So weit, so gut.
Ich hab das so realisiert:

Code: Alles auswählen

f=open("z://python_workspace/Kira_Exif.jpg","rb")
b=f.read()
bd=str(b)
a= bd.find('Exif')
16 Bytes weiter beginnt der Eintrag für den ersten TAG – und da ist mein Problem.
In einem HEX-Editor sieht das so aus:

45 78 69 66 00 00 4D 4D 00 2A 00 00 00 08 00 08 01
E x i f . . M M . * . . . . . . .

"print(b)" im Python-Programm liefert das:
\x1cExif\x00\x00MM\x00*\x00\x00\x00\x08\x00\x08\x01\x0f\x00\x02\x00\x00\x00\x1

darstellbare Zeichen werden dargestellt, nicht darstellbare werden in HEX-Code mit Backslash als Trenner geprintet. Das Abzählen der Bytes ist so nicht ohne weiteres möglich. Hat jemand einen Vorschlag, wie man da am besten vorgeht.

Re: Binärdatei (jpeg) bearbeiten

Verfasst: Dienstag 20. Februar 2018, 23:16
von Sirius3
@DB7WN: der Aufruf von ›str‹ ist unsinnig; Du willst ja mit Bytes arbeiten. Daneben hilft Dir das struct-Modul.

Re: Binärdatei (jpeg) bearbeiten

Verfasst: Dienstag 20. Februar 2018, 23:28
von DB7WN
Danke für die Antwort, die Ausgabe, mit der ich so schlecht weiterarbeiten kann, kommt schon (s.o.) mit "print(b)" zustande. "b" ist noch vom Typ "binary". Dir Umwandlung durch str hab ich gemacht, weil die Funktion ".find" nur mit strings funktioniert.

Re: Binärdatei (jpeg) bearbeiten

Verfasst: Dienstag 20. Februar 2018, 23:34
von Sirius3
@DB7WN: »print« wandelt alles in Strings um, bevor es etwas ausgeben kann. Wenn Du binäre Daten verarbeiten willst, solltest Du zumindest die Grundlagen von »bytes«-Objekten kennen.

Code: Alles auswählen

pos = b.find(b'Exif')

Re: Binärdatei (jpeg) bearbeiten

Verfasst: Dienstag 20. Februar 2018, 23:41
von DB7WN
Sirius3 hat geschrieben:Daneben hilft Dir das struct-Modul.
"struct" ist mir bisher noch nicht begegnet. Meine erste Google-Suche danach brachte eine ähnliche Frage in einem Forum zu Tage. Ich werd mal schauen. Viele deutschsprachige Einträge gibt es nicht dazu. In meinem Python-GE-PACKT Handbuch findet struct keine Erwähnung.

Re: Binärdatei (jpeg) bearbeiten

Verfasst: Mittwoch 21. Februar 2018, 08:31
von noisefloor
Hallo,
In meinem Python-GE-PACKT Handbuch findet struct keine Erwähnung.
`struct`ist ein Modul, was man als Anfänger so wie so nicht braucht und auch als Fortgeschrittener eher selten bzw. in speziellen Fällen - wie z.B. deinem :-) Von daher ist das in der Print-Literautr selten zu finden.
Viele deutschsprachige Einträge gibt es nicht dazu.
Englisch ist nun mal die Standardsprache für Programmierdokus. Wenn du nur deutsch lesen willst kommst du nicht weit... Das struct-Modul ist auch in der offiziellen Python-Doku erklärt.

Gruß, noisefloor