import magic from PIL import Image from PIL import ExifTags from src.exif_data import ExifData class MetadataHandler: """This class is for getting the meta data from a image or a video""" def __init__(self) -> None: self.__videoFormats = ["MP4", "MOV", "M4V", "MKV", "AVI", "WMV", "AVCHD", "WEBM", "MPEG"] self.__pictureFormats = ["JPG", "JPEG", "PNG", "TIFF"] self.__keyWords = ["DateTime", "Make"] def __is_file_video(self, path:str): mime = magic.Magic(mime=True) file = mime.from_file(path) if file.find('video') != -1: return True else: return False def __get_image_meta_data(self, image_path): image_extension = str(image_path).split("/")[-1].split(".") # TODO: Sort out videos img = Image.open(f"{image_path}") values = [] for tag, text in img.getexif().items(): if tag in ExifTags.TAGS: if image_extension[1].upper() in self.__pictureFormats: values.append(ExifTags.TAGS[tag] + "|" + str(text)) return self.__filter_date_and_make(metaTags=self.__filter_data(value=values), imagePath=image_path) def __filter_date_and_make(self, metaTags: list, imagePath): day = None month = None year = None time = None make = str(metaTags[1]).split("|")[1] image_name = str(imagePath).split("/")[-1] _date = str(metaTags[0]).split("|") time = _date[1].split(" ")[1] _date = _date[1].split(" ")[0].split(":") day = _date[2] month = _date[1] year = _date[0] return ExifData(image_path=imagePath, image_name=image_name, day=day, month=month, year=year, time=time, make=make) def __filter_data(self, value): value_return = [] for k in self.__keyWords: for v in value: temp = v.split("|") if temp[0] == k: value_return.append(v) return value_return def get_meta_data(self, images: list): exif_data_list = [] for image in images: exif_data_list.append(self.__get_image_meta_data(image_path=image)) return exif_data_list