def __init__(self, filename, parent=None): super(MetadataWidget, self).__init__(parent) table = [] last = None with exiftool.ExifTool(exiftool_exe()) as et: metadata = et.get_metadata(filename) for tag, value in metadata.items(): ignore = [ 'SourceFile', 'ExifTool:ExifTool', 'File:FileName', 'File:Directory', 'File:FileSize', 'File:FileModifyDate', 'File:FileInodeChangeDate', 'File:FileAccessDate', 'File:FileType', 'File:FilePermissions', 'File:FileTypeExtension', 'File:MIMEType' ] if not value or any(t in tag for t in ignore): continue value = str(value).replace(', use -b option to extract', '') group, desc = tag.split(':') if last is None or group != last: table.append([group, desc, value]) last = group else: table.append([None, desc, value]) headers = [self.tr('Group'), self.tr('Description'), self.tr('Value')] table_widget = TableWidget(table, headers) main_layout = QVBoxLayout() main_layout.addWidget(table_widget) self.setLayout(main_layout) self.setMinimumSize(620, 500)
def __init__(self, filename, parent=None): super(LocationWidget, self).__init__(parent) self.temp_dir = QTemporaryDir() if self.temp_dir.isValid(): with exiftool.ExifTool(exiftool_exe()) as et: try: metadata = et.get_metadata(filename) lat = metadata["Composite:GPSLatitude"] lon = metadata["Composite:GPSLongitude"] except KeyError: label = QLabel(self.tr("Geolocation data not found!")) modify_font(label, bold=True) label.setStyleSheet("color: #FF0000") label.setAlignment(Qt.AlignCenter) layout = QVBoxLayout() layout.addWidget(label) self.setLayout(layout) return url = f"https://www.google.com/maps/place/{lat},{lon}/@{lat},{lon},17z/" \ f"data=!4m5!3m4!1s0x0:0x0!8m2!3d{lat}!4d{lon}" web_view = QWebEngineView() web_view.load(QUrl(url)) layout = QVBoxLayout() layout.addWidget(web_view) self.setLayout(layout)
def __init__(self, filename, parent=None): super(LocationWidget, self).__init__(parent) self.temp_dir = QTemporaryDir() if self.temp_dir.isValid(): with exiftool.ExifTool(exiftool_exe()) as et: temp_file = os.path.join(self.temp_dir.path(), "geo.html") metadata = et.get_metadata(filename) try: lat = metadata["Composite:GPSLatitude"] long = metadata["Composite:GPSLongitude"] except KeyError: label = QLabel(self.tr("Geolocation data not found!")) modify_font(label, bold=True) label.setStyleSheet("color: #FF0000") label.setAlignment(Qt.AlignCenter) layout = QVBoxLayout() layout.addWidget(label) self.setLayout(layout) return html = '<iframe src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d2948.532014673314!2d{}!3d{}!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0x0!2zNDLCsDIxJzA5LjAiTiA3McKwMDUnMjguMiJX!5e0!3m2!1sit!2sit!4v1590074026898!5m2!1sit!2sit" width="600" height="450" frameborder="0" style="border:0;" allowfullscreen="" aria-hidden="false" tabindex="0"></iframe>'.format( long, lat) with open(temp_file, "w") as file: file.write(html) web_view = QWebEngineView() web_view.load(QUrl("file://" + temp_file)) layout = QVBoxLayout() layout.addWidget(web_view) self.setLayout(layout)
def extract_exif_from_dir(source_dir, extractables): # List files with exif data: exif_files = list_exif_sources(source_dir) if exif_files is None: return None # Initialise counters and arrays: cropped_photo_exifs = [] cropped, uncropped = 0, 0 # Loop 1: Extract the exif data for cropped photos: with pet.ExifTool(executable_='exiftool') as et: for ef in tqdm(exif_files): # Load the exif data: exif_data = et.get_metadata(ef) # Extract the crop datas: crop_data = extract_crop_data_from_exif(exif_data, extractables) # If we do not have crop data, skip: if crop_data['CropFactor'] <= 0: uncropped += 1 continue else: cropped += 1 cropped_photo_exifs.append(crop_data) print("Found cropped images:", cropped) print("Found uncropped images:", uncropped) return cropped_photo_exifs
def read_exif(files): """ :param files: :return: """ exif_array = [] filename = file_name bar = Bar('Reading EXIF Data', max=len(files)) with exiftool.ExifTool() as et: metadata = iter(et.get_metadata_batch(files)) for d in metadata: exif_array.append(d) bar.next() bar.finish() print(color.BLUE + "Scanning images complete " + color.END) formatted = format_data(exif_array) writeOutputtoText(filename, formatted) print(color.GREEN + "Process Complete." + color.END)
def __init__(self, filename, parent=None): super(ExifWidget, self).__init__(parent) table = [] last = None with exiftool.ExifTool(exiftool_exe()) as et: metadata = et.get_metadata(filename) for tag, value in metadata.items(): ignore = [ "SourceFile", "ExifTool:ExifTool", "File:FileName", "File:Directory", "File:FileSize", "File:FileModifyDate", "File:FileInodeChangeDate", "File:FileAccessDate", "File:FileType", "File:FilePermissions", "File:FileTypeExtension", "File:MIMEType", ] if not value or any(t in tag for t in ignore): continue value = str(value).replace(", use -b option to extract", "") value = value.replace("Binary data ", "Binary data: ") group, desc = tag.split(":") if last is None or group != last: table.append([group, desc, value]) last = group else: table.append([None, desc, value]) headers = [self.tr("Group"), self.tr("Description"), self.tr("Value")] table_widget = TableWidget(table, headers) main_layout = QVBoxLayout() main_layout.addWidget(table_widget) self.setLayout(main_layout) self.setMinimumSize(740, 500)
self.longitude = "" self.duplicate_filenames = [] class PhotoBucket: def __init__(self): self.date_taken = "" self.bucket_name = "" self.latitude = "" self.longitude = "" self.photos = [] # Path to exiftool EXIFTOOL_PATH = r".\pyexiftool\exiftool(-k).exe" et = exiftool.ExifTool(EXIFTOOL_PATH) et.start() # Radius in Miles for photos to be in the "same spot" RADIUS_MILES = 2 # Default Latitude/Longitude DEFAULT_LATITUDE = 38.0406 DEFAULT_LONGITUDE = -84.5037 # Directory to Walk PATH = sys.argv[1] md5_list = [] photos = {} photo_buckets = []
def getDate(cams): with exiftool.ExifTool() as et: DateTime = et.get_tag_batch('DateTimeOriginal', files) return (DateTime)
except os.error as e: pass shutil.move(src,dest_dir) if __name__ == '__main__': root = "/" #path to start to visit and get all file from folder and subdirectoy for path, subdirs, files in os.walk(root): for name in files: try: pathfile = os.path.join(path, name) if pathfile.endswith('.jpg') or pathfile.endswith('.png') : with exiftool.ExifTool() as et: metadata = et.get_metadata(pathfile) dt = datetime.strptime(metadata['File:FileModifyDate'][:19], '%Y:%m:%d %H:%M:%S') im = Image.open(pathfile) width, height = im.size #Remove al thumbails of photorec if (width or height) <= 160: os.remove(pathfile) else: fcopy(pathfile,str(dt.year), str(dt.month)) else: print("File Format don't accepted") except Exception as e: print(e) pass