1717#
1818#########################################################################
1919
20- import os
2120import logging
2221
2322from slugify import slugify
@@ -70,13 +69,14 @@ def exif_extract_metadata_doc(doc):
7069 return None
7170
7271 file_path = doc .files [0 ]
73- _ , ext = os .path .splitext (os .path .basename (file_path ))
7472
75- if ext [ 1 :] in { "jpg" , "jpeg" , "png" } :
73+ if doc . is_image :
7674 from PIL import Image , ExifTags
7775
7876 img = Image .open (file_path )
79- exif_data = {ExifTags .TAGS [k ]: v for k , v in img ._getexif ().items () if k in ExifTags .TAGS }
77+ exif = img .getexif ()
78+ # Main EXIF tags
79+ exif_data = {ExifTags .TAGS [k ]: v for k , v in exif .items () if k in ExifTags .TAGS }
8080
8181 model = None
8282 date = None
@@ -86,6 +86,12 @@ def exif_extract_metadata_doc(doc):
8686 lon = None
8787 abstract = None
8888
89+ # Get Exif IFD for DateTimeOriginal etc.
90+ exif_ifd = exif .get_ifd (ExifTags .IFD .Exif )
91+ if exif_ifd :
92+ exif_ifd_data = {ExifTags .TAGS .get (k , k ): v for k , v in exif_ifd .items ()}
93+ exif_data .update (exif_ifd_data )
94+
8995 if "DateTime" in exif_data :
9096 date = exif_data ["DateTime" ]
9197 elif "DateTimeOriginal" in exif_data :
@@ -107,11 +113,13 @@ def exif_extract_metadata_doc(doc):
107113 model = exif_data .get ("Model" , None )
108114 keywords .append (slugify (model ))
109115
110- if "GPSInfo" in exif_data :
116+ # Get GPS IFD for GPS data
117+ gps_ifd = exif .get_ifd (ExifTags .IFD .GPSInfo )
118+ if gps_ifd :
111119 gpsinfo = {}
112- for key in exif_data [ "GPSInfo" ] .keys ():
120+ for key in gps_ifd .keys ():
113121 decode = ExifTags .GPSTAGS .get (key , key )
114- gpsinfo [decode ] = exif_data [ "GPSInfo" ] [key ]
122+ gpsinfo [decode ] = gps_ifd [key ]
115123 if "GPSLatitude" in gpsinfo and "GPSLongitude" in gpsinfo :
116124 lat = convertExifLocationToDecimalDegrees (gpsinfo ["GPSLatitude" ], gpsinfo .get ("GPSLatitudeRef" , "N" ))
117125 lon = convertExifLocationToDecimalDegrees (gpsinfo ["GPSLongitude" ], gpsinfo .get ("GPSLongitudeRef" , "E" ))
0 commit comments