我有来自某些来源的坐标,并希望用它们标记我的jpg文件.将地理标记写入exif数据的最佳python库是什么?
我自己没有尝试过,但是从文档[pyexiv2] [1]看来它应该可以完成这项工作.
[1]:http://tilloy.net/dev/pyexiv2/tutorial.html #link缺少最后一个字符
以下是使用pyexiv2库设置GPS位置的示例.我已通过将带地理标记的图片上传到Panoramio来测试此脚本
#!/usr/bin/env python import pyexiv2 import fractions from PIL import Image from PIL.ExifTags import TAGS import sys def to_deg(value, loc): if value < 0: loc_value = loc[0] elif value > 0: loc_value = loc[1] else: loc_value = "" abs_value = abs(value) deg = int(abs_value) t1 = (abs_value-deg)*60 min = int(t1) sec = round((t1 - min)* 60, 5) return (deg, min, sec, loc_value) def set_gps_location(file_name, lat, lng): """Adds GPS position as EXIF metadata Keyword arguments: file_name -- image file lat -- latitude (as float) lng -- longitude (as float) """ lat_deg = to_deg(lat, ["S", "N"]) lng_deg = to_deg(lng, ["W", "E"]) print lat_deg print lng_deg # convert decimal coordinates into degrees, munutes and seconds exiv_lat = (pyexiv2.Rational(lat_deg[0]*60+lat_deg[1],60),pyexiv2.Rational(lat_deg[2]*100,6000), pyexiv2.Rational(0, 1)) exiv_lng = (pyexiv2.Rational(lng_deg[0]*60+lng_deg[1],60),pyexiv2.Rational(lng_deg[2]*100,6000), pyexiv2.Rational(0, 1)) exiv_image = pyexiv2.Image(file_name) exiv_image.readMetadata() exif_keys = exiv_image.exifKeys() exiv_image["Exif.GPSInfo.GPSLatitude"] = exiv_lat exiv_image["Exif.GPSInfo.GPSLatitudeRef"] = lat_deg[3] exiv_image["Exif.GPSInfo.GPSLongitude"] = exiv_lng exiv_image["Exif.GPSInfo.GPSLongitudeRef"] = lng_deg[3] exiv_image["Exif.Image.GPSTag"] = 654 exiv_image["Exif.GPSInfo.GPSMapDatum"] = "WGS-84" exiv_image["Exif.GPSInfo.GPSVersionID"] = '2 0 0 0' exiv_image.writeMetadata() set_gps_location(sys.argv[1], float(sys.argv[2]), float(sys.argv[3]))
pexif的编写以地理标记为目标(我强调):
pexif是一个Python库,用于解析和更重要的是编辑JPEG文件中的EXIF数据。
这是由于需要将GPS标记的数据添加到我的图像中而产生的,不幸的是,那里的其他库无法进行更新,并且似乎不容易构建为能够添加此类内容。不是可重用的软件!
我写这篇文章的主要原因是为了提供一种对我的照片进行地理标记的简便方法,并且该库现在看来已经足够成熟。