BitMover/_image_tag.py

61 lines
1.8 KiB
Python

import exifread
from datetime import datetime
from _media_file import MediaFile
class ImageTag(MediaFile):
def __init__(self,path_file_name=None,*args,**kwargs):
super(ImageTag,self).__init__(*args,**kwargs)
if path_file_name is not None:
self.path_file_name = path_file_name
self.date_time_original = self.get_img_date()
self.image_tags = self.get_image_tags()
def get_image_tag(self,t):
tag_data = None
for tag in self.image_tags:
if t.lower() in tag.lower():
tag_data = self.image_tags[tag]
break
return tag_data
@staticmethod
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_image_tags(self):
with open(self.path_file_name,'rb') as f:
tags = exifread.process_file(f)
f.close()
return tags
def process_img_date_tag(self, tag, date_time_format):
t = None
try:
t = datetime.strptime(str(self.image_tags[tag]), date_time_format)
except:
pass
return t
def get_img_date(self):
t = None
dt_tag = None
for tag in self.image_tags:
if 'DateTime' in tag:
t = tag
break
if t is None:
dt_tag = self.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']:
dt_tag = self.process_img_date_tag(t,f)
if dt_tag is not None:
break
if dt_tag is None:
dt_tag = self.set_generic_date_time()
return dt_tag