61 lines
1.8 KiB
Python
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 |