Last active
June 7, 2021 07:10
-
-
Save cgoldberg/8372494 to your computer and use it in GitHub Desktop.
Python - Fix Photo Exif Metadata
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# | |
# gexiv2 image Exif date fixer. | |
# Corey Goldberg, 2014 | |
"""Recursively scan a directory tree, fixing dates | |
on all jpg/png image files. | |
Each file's Exif metadata and atime/mtime are all | |
set to the file's ctime. | |
Modifications are done in-place. | |
Requires: gexiv2 | |
""" | |
import os | |
import time | |
# GObject-based wrapper around the Exiv2 library. | |
# sudo apt-get install gir1.2-gexiv2-0.4 | |
from gi.repository import GExiv2 | |
def fix_image_dates(img_path): | |
t = os.path.getctime(img_path) | |
ctime = time.strftime('%Y:%m:%d %H:%M:%S', time.localtime(t)) | |
exif = GExiv2.Metadata(img_path) | |
exif['Exif.Image.DateTime'] = ctime | |
exif['Exif.Photo.DateTimeDigitized'] = ctime | |
exif['Exif.Photo.DateTimeOriginal'] = ctime | |
exif.save_file() | |
os.utime(img_path, (t, t)) | |
if __name__ == '__main__': | |
dir = '.' | |
for root, dirs, file_names in os.walk(dir): | |
for file_name in file_names: | |
if file_name.lower().endswith(('jpg', 'png')): | |
img_path = os.path.join(root, file_name) | |
fix_image_dates(img_path) |
Maybe you should explicitly mention, that this will overwrite the times already present in any existing EXIF metadata.
(I wrote this comment here, because your blog only allows comments with a Google+ account. Please rectify that.)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Thanks!
I'll go to add some metada and tags. It looks very usefull.