exif_shift.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. #!/usr/bin/python3
  2. import sys
  3. import piexif as x
  4. import datetime as dt
  5. shift = dt.timedelta(hours = 1, minutes = 6)
  6. print('Shift exif date time by', shift)
  7. if len(sys.argv) <= 1:
  8. print(sys.argv[0], 'img1.jpg img2.jpg')
  9. quit()
  10. def codesOfLabelsContaining(value: str):
  11. codes = []
  12. for (k, v) in x.TAGS['Exif'].items():
  13. if value in v['name']:
  14. codes.append(k)
  15. return codes
  16. timeCodes = codesOfLabelsContaining('Time')
  17. dateTimeCodes = codesOfLabelsContaining('DateTime')
  18. filenames = sys.argv[1:]
  19. formatDate = '%Y:%m:%d %H:%M:%S'
  20. formatFrom = f"b'{formatDate}'"
  21. def dateTimeOf(exif):
  22. for k in dateTimeCodes:
  23. if k in exif.keys():
  24. return dt.datetime.strptime(str(exif[k]), formatFrom)
  25. return dt.datetime.now()
  26. def shiftDateTime(exifDict):
  27. e = exifDict['Exif']
  28. t = dateTimeOf(e)
  29. targetDateTime = t + shift
  30. for k in dateTimeCodes:
  31. e[k] = targetDateTime.strftime(formatDate).encode()
  32. return exifDict
  33. for filename in filenames:
  34. print(filename)
  35. exifDict = x.load(filename)
  36. exifDict = shiftDateTime(exifDict)
  37. exifBytes = x.dump(exifDict)
  38. x.insert(exifBytes, filename)