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