Как я могу написать полные координаты GPS в градусах, минутах, секундах
форматировать как GPS-тег EXIF для изображений .tif с помощью Python? Я могу написать
часть координаты GPS с использованием
piexif упаковка (например,
Долгота), если я включу только десятичную дробь и минуты как целые числа.
Однако piexif выдает ValueError всякий раз, когда я включаю секунды и
доли секунды. piexif будет принимать только кортеж, содержащий два
целые числа для долготы, несмотря на стандартный вызов для 3
целые числа.
Информация о тегах EXIF доступна [здесь] (http://www.cipa.jp/std/documents/e/DC-
008-2012_E.pdf)!
import piexif # pip install piexif
from PIL import Image # PIL version 4.0.0 for compatability with conda/py3.6
fname = "foo.tiff"
#read tiff file into a pillow image obj
im = Image.open(fname)
#readin any existing exif data to a dict
exif_dict = piexif.load(fname)
#GPS coord to write to GPS tag in dms format
#long = 120° 37' 42.9996" East longitude
LongRef = "E"
Long_d = 120
Long_m = 37
Long_s = 42.9996
#add gps data to EXIF containing GPS dict
#exif_dict['GPS'][piexif.GPSIFD.GPSLongitude] = (Long_d, Long_m) #this works
exif_dict['GPS'][piexif.GPSIFD.GPSLongitude] = (Long_d, (Long_m,Long_s)) #this returns an error
exif_dict['GPS'][piexif.GPSIFD.GPSLongitude] = (Long_d, Long_m, Long_s) #this also returns an error
"""
Traceback (most recent call last):
File "<ipython-input-210-918cd4e2989f>", line 7, in <module>
exif_bytes = piexif.dump(exif_dict)
File "C:\Users\JF\AppData\Local\Continuum\anaconda3\lib\site-packages\piexif-1.0.13-py3.6.egg\piexif\_dump.py", line 74, in dump
gps_set = _dict_to_bytes(gps_ifd, "GPS", zeroth_length + exif_length)
File "C:\Users\JF\AppData\Local\Continuum\anaconda3\lib\site-packages\piexif-1.0.13-py3.6.egg\piexif\_dump.py", line 341, in _dict_to_bytes
'{0} in {1} IFD. Got as {2}.'.format(key, ifd, type(ifd_dict[key]))
ValueError: "dump" got wrong type of exif value.
4 in GPS IFD. Got as <class 'tuple'>.
"""
#convert updated GPS dict to exif_bytes
exif_bytes = piexif.dump(exif_dict)
#encode updated exif tag into image and save as a jpeg
im.save(fname.replace('.tiff','.jpeg'), "jpeg", exif=exif_bytes)