exif_offset.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. #!/usr/bin/python3
  2. import sys
  3. import piexif as x
  4. import datetime as dt
  5. offset = '+02:00'
  6. print('Override offset with', offset)
  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. offsetCodes = codesOfLabelsContaining('OffsetTime')
  18. filenames = sys.argv[1:]
  19. def describeExif(exif):
  20. for k in timeCodes:
  21. if k in exif.keys():
  22. print('Exif[', k, ']=', exif[k], '->', x.TAGS['Exif'][k]['name'])
  23. else:
  24. print('Exif[', k, ']=', '?', '->', x.TAGS['Exif'][k]['name'])
  25. def overrideOffset(exifDict):
  26. e = exifDict['Exif']
  27. offsetBytes = offset.encode()
  28. for k in offsetCodes:
  29. print('Exif[', k, ']=', e[k], '->', offsetBytes, ':', x.TAGS['Exif'][k]['name'])
  30. e[k] = offsetBytes
  31. return exifDict
  32. for filename in filenames:
  33. print(filename)
  34. exifDict = x.load(filename)
  35. describeExif(exifDict['Exif'])
  36. exifDict = overrideOffset(exifDict)
  37. describeExif(exifDict['Exif'])
  38. exifBytes = x.dump(exifDict)
  39. x.insert(exifBytes, filename)
  40. print()