2017-07-20 1 views
1

Ich muss Fotos nach Aufnahmedatum extrahieren und organisieren. Windows 10, Python 2.7. Ich hatte, dies zu tunPython EXIF ​​kann Datum Informationen nicht finden, aber wenn Viewer durch Windows-Eigenschaften

from PIL import Image 
def get_date_taken(path): 
    return Image.open(path)._getexif()[36867] 

folgende:

Get date and time when photo was taken from EXIF data using PIL

und das funktioniert gut für ein paar Fotos.

enter image description here

Großen. Jetzt eine andere Reihe von Bildern, neue Kamera, die Eigenschaften ähnlich aussehen.

enter image description here

aber die dict ist völlig anders

Image.open(image)._getexif()[36867] 
Traceback (most recent call last): 
    Debug Probe, prompt 369, line 1 
KeyError: 36867 
Image.open(image)._getexif() 
{36864: '0220', 37121: '\x01\x02\x03\x00', 40962: 2048, 40963: 1536, 40960: '0100', 40961: 1, 296: 2, 34665: 90, 34855: 1600, 531: 2, 282: (72, 1), 283: (72, 1), 37500: '\x01\xf1\x03\x00\x03\x00\x00\x00\x11 .... 

Ich versuchte exifread zu

a=exifread.process_file(open(image,'rb')) 
a.keys() 
['EXIF MakerNote', 'Image ExifOffset', 'EXIF ExposureTime', 'EXIF ComponentsConfiguration', 'Image YCbCrPositioning', 'Image XResolution', 'EXIF FlashPixVersion', 'EXIF ISOSpeedRatings', 'Image YResolution', 'EXIF ColorSpace', 'EXIF ExifImageLength', 'EXIF ExifVersion', 'Image ResolutionUnit', 'EXIF ExifImageWidth'] 

aber kein Datum genommen. Was ist Windows lesen, dass Python nicht ist? Irgendwelche Vorschläge darüber, was ich sonst noch versuchen sollte, muss ich mich plattformübergreifend sorgen? Gleiche Frage wie hier:

"Date Taken" not showing up in Image PropertyItems while it shows in file details (file properties) in Windows Explorer

aber in Python. Dieser freundliche Online-Metadaten-Viewer

http://exif.regex.info/exif.cgi

schlägt beiden Bilder Datum erstellt Tags in exif haben. Wie sonst kann man auf sie zugreifen?

Eine Probe problematische Bild ist here

+0

Mit Ihrer testdat und exifread ich ' 'EXIF Aufnahmedatum': (0x9003) ASCII = 2012: 08: 19 16.44.38 @ 368' als einer der Tags zurückgegeben. py3.5 und ExifRead-2.1.2. – MatsLindh

+0

interessant, gleiche exifread-Version, andere Python-Version. Wird testen. – bw4sz

Antwort

1

ich es die exifread Bibliothek tat. Hier ist ein Ausschnitt meines Python-Codes.

import exifread 
for filename in os.listdir(directoryInput): 
    if filename.endswith('.JPG'): 
     with open("%s/%s" % (directoryInput, filename), 'rb') as image: # file path and name 
      exif = exifread.process_file(image) 
      dt = str(exif['EXIF DateTimeOriginal']) # might be different 
      # segment string dt into date and time 
      day, dtime = dt.split(" ", 1) 
      # segment time into hour, minute, second 
      hour, minute, second = dtime.split(":", 2) 
+0

Sie sollten wahrscheinlich 'os.path.join' anstelle von'% s /% s' verwenden und Pythons 'datetime' Standardbibliotheksmodul kann die Daten für Sie parsen. – MaxNoe

+0

Danke @MaxNoe meinen Code jetzt aktualisieren –

Verwandte Themen