mirror of
https://github.com/9001/copyparty.git
synced 2026-03-22 16:13:11 +10:00
54 lines
1.3 KiB
Python
Executable File
54 lines
1.3 KiB
Python
Executable File
import json
|
|
import re
|
|
import sys
|
|
|
|
from copyparty.util import fsenc, runcmd
|
|
|
|
|
|
"""
|
|
uses exiftool to geotag images based on embedded gps coordinates in exif data
|
|
|
|
adds four new metadata keys:
|
|
.gps_lat = latitute
|
|
.gps_lon = longitude
|
|
.masl = meters above sea level
|
|
city = "city, subregion, region"
|
|
|
|
usage: -mtp .masl,.gps_lat,.gps_lon,city=ad,t10,bin/mtag/geotag.py
|
|
|
|
example: https://a.ocv.me/pub/blog/j7/8/?grid=0
|
|
"""
|
|
|
|
|
|
def main():
|
|
cmd = b"exiftool -api geolocation -n".split(b" ")
|
|
rc, so, se = runcmd(cmd + [fsenc(sys.argv[1])])
|
|
ptn = re.compile("([^:]*[^ :]) *: (.*)")
|
|
city = ["", "", ""]
|
|
ret = {}
|
|
for ln in so.split("\n"):
|
|
m = ptn.match(ln)
|
|
if not m:
|
|
continue
|
|
k, v = m.groups()
|
|
if k == "Geolocation City":
|
|
city[2] = v
|
|
elif k == "Geolocation Subregion":
|
|
city[1] = v
|
|
elif k == "Geolocation Region":
|
|
city[0] = v
|
|
elif k == "GPS Latitude":
|
|
ret[".gps_lat"] = "%.04f" % (float(v),)
|
|
elif k == "GPS Longitude":
|
|
ret[".gps_lon"] = "%.04f" % (float(v),)
|
|
elif k == "GPS Altitude":
|
|
ret[".masl"] = str(int(float(v)))
|
|
v = ", ".join(city).strip(", ")
|
|
if v:
|
|
ret["city"] = v
|
|
print(json.dumps(ret))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|