浏览代码

:tada: Version scripts to manipulate exif data

DricomDragon 2 月之前
父节点
当前提交
d87fe3e67f
共有 3 个文件被更改,包括 104 次插入0 次删除
  1. 21 0
      exifScripts/README.md
  2. 31 0
      exifScripts/exif_describe.py
  3. 52 0
      exifScripts/exif_shift.py

+ 21 - 0
exifScripts/README.md

@@ -0,0 +1,21 @@
+# Exif scripts
+
+Simple scripts to fix EXIF data of jpg files.
+
+## Resources
+
+[piexif doc](https://piexif.readthedocs.io/en/latest/functions.html)
+[datetime python3 doc](https://docs.python.org/3/library/datetime.html)
+
+## Install
+
+```sh
+pip install piexif
+```
+
+## Use
+
+```fish
+python3 exif_describe.py *.jp{,?}g
+python3 exif_shift.py *.jp{,?}g
+```

+ 31 - 0
exifScripts/exif_describe.py

@@ -0,0 +1,31 @@
+#!/usr/bin/python3
+
+print('Exif tool started')
+
+import sys
+import piexif as x
+
+if len(sys.argv) < 1:
+    print('Give some files in input')
+    quit()
+
+
+timeTagCodes = []
+for (k, v) in x.TAGS['Exif'].items():
+    if 'Time' in v['name']:
+        timeTagCodes.append(k)
+
+filenames = sys.argv[1:]
+
+def describeTimeOf(filename: str):
+    e = x.load(filename)['Exif']
+    for k in timeTagCodes:
+        if k in e.keys():
+            print('Exif[', k, ']=', e[k], '->', x.TAGS['Exif'][k]['name'])
+        else:
+            print('Exif[', k, ']=', '?', '->', x.TAGS['Exif'][k]['name'])
+
+for filename in filenames:
+    print(filename)
+    describeTimeOf(filename)
+    print()

+ 52 - 0
exifScripts/exif_shift.py

@@ -0,0 +1,52 @@
+#!/usr/bin/python3
+
+import sys
+import piexif as x
+import datetime as dt
+
+shift = dt.timedelta(hours = 1)
+print('Shift exif date time by', shift)
+
+if len(sys.argv) < 1:
+    print('shift img1.jpg img2.jpg')
+    quit()
+
+
+timeTagCodes = [36867, 36868]
+
+filenames = sys.argv[1:]
+
+formatDate = '%Y:%m:%d %H:%M:%S'
+formatFrom = f"b'{formatDate}'"
+
+def describeExif(exif):
+    for k in timeTagCodes:
+        if k in exif.keys():
+            t = dt.datetime.strptime(str(exif[k]), formatFrom)
+            print('Exif[', k, ']=', t, '->', x.TAGS['Exif'][k]['name'])
+        else:
+            print('Exif[', k, ']=', '?', '->', x.TAGS['Exif'][k]['name'])
+    return t
+
+
+def shiftThisFile(filename: str):
+    m = x.load(filename)
+    e = m['Exif']
+    t = describeExif(e)
+
+    targetDateTime = t + shift
+    print('Shifting')
+    print(t)
+    print('to')
+    print(targetDateTime)
+
+    for k in timeTagCodes:
+        e[k] = targetDateTime.strftime(formatDate).encode()
+
+    describeExif(e)
+
+
+for filename in filenames:
+    print(filename)
+    t = shiftThisFile(filename)
+    print()