98 lines
2.4 KiB
Python
98 lines
2.4 KiB
Python
#!/usr/bin/env python
|
|
|
|
"""
|
|
Get EXIF information from image
|
|
"""
|
|
from uu import Error
|
|
|
|
import exifread
|
|
from datetime import datetime
|
|
from lumberjack import timber
|
|
|
|
log = timber(__name__)
|
|
|
|
def get_exif_date(tags,tag,f):
|
|
t = ''
|
|
log.debug(f'function: get_exif_tag(tags:{tags},tag:{tag},format:{f}')
|
|
try:
|
|
t = datetime.strptime(str(tags[tag]),f)
|
|
except:
|
|
pass
|
|
# log.debug(f'Error: {e}. Format: {f}')
|
|
|
|
return t
|
|
|
|
def get_os_ctime(path):
|
|
# Don't pull the file ctime anymore, more often than not, it's wrong.
|
|
# t = datetime.fromtimestamp(os.path.getctime(path))
|
|
|
|
#raise an error so it will except and move on.
|
|
raise ValueError(f"{path}: Using ctime like this is usually not good.")
|
|
|
|
|
|
def set_generic_date_time(date = '1900:01:01',
|
|
time = '00:00:00',
|
|
f = '%Y:%m:%d %H:%M:%S'):
|
|
|
|
t = datetime.strptime(str(f'{date} {time}'),f)
|
|
return t
|
|
|
|
|
|
def get_img_date(p):
|
|
with open(p, 'rb') as file:
|
|
tags = exifread.process_file(file)
|
|
|
|
if 'Composite DateTimeOriginal' in tags:
|
|
get_exif_date(tags,'Composite DateTimeOriginal','%Y:%m:%d %H:%M')
|
|
|
|
def get_exif_tag(p,t):
|
|
with open(p, "rb") as f:
|
|
try:
|
|
tags = exifread.process_file(f)
|
|
print(f'{p}: {tags}')
|
|
except Error as e:
|
|
return f'Received Error: {e} when trying to open {p}'
|
|
finally:
|
|
f.close()
|
|
|
|
for tag in tags:
|
|
print(tag)
|
|
if t in tag.lower():
|
|
print(tags[tag])
|
|
return tags[tag]
|
|
else:
|
|
pass
|
|
|
|
def get_image_date(path):
|
|
t = ''
|
|
exif_dt = ''
|
|
|
|
with open(path, "rb") as file:
|
|
try:
|
|
tags = exifread.process_file(file)
|
|
except Error as e:
|
|
log.error(e)
|
|
finally:
|
|
file.close()
|
|
|
|
for tag in tags:
|
|
if "DateTime" in tag:
|
|
t = tag
|
|
break
|
|
|
|
if '' == t:
|
|
exif_dt = set_generic_date_time()
|
|
else:
|
|
for f in ['%Y:%m:%d %H:%M:%S',
|
|
'%Y/%m/%d %H:%M:%S',
|
|
'%Y-%m-%d-%H-%M-%S']:
|
|
log.debug(f'Trying... {t}, {f}, {path} ')
|
|
exif_dt = get_exif_date(tags, t, f)
|
|
|
|
if '' != exif_dt:
|
|
break
|
|
|
|
if '' == exif_dt:
|
|
exif_dt = set_generic_date_time()
|
|
# s = get_os_ctime(path) # This could produce wildly incorrect results
|
|
return exif_dt |