我有一些來源的座標,並希望用他們標記我的JPG文件。將地理標記寫入exif數據的最佳python庫是什麼?什麼是使用python geotag jpeg-images的最佳方式?
3
A
回答
3
pexif與地理標記作爲一個目標(我的重點)寫的:
pexif是一個Python庫分析,更重要的編輯EXIF數據在JPEG文件中。
這從增長需要將GPS標記的數據添加到我的圖像,不幸的是,其他庫無法做更新,似乎並不容易架構,以便能夠添加這樣的事情。不可重複使用的軟件盛大!
我寫這個的主要原因是提供地理標記我的照片,一個簡單的方法,和庫現在似乎已經成熟到足以做到這一點。
6
我還沒有自己嘗試過,但從文檔[pyexiv2] [1]看起來應該可以完成這項工作。
[1]:http://tilloy.net/dev/pyexiv2/tutorial.html #LINK缺少最後一個字符
5
以下是如何使用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]))
2
上面的代碼工作測試這個腳本,但我不得不修改set_gps_location功能與pyexiv2當前版本的工作......也許馬克西姆使用的是舊版本:
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))
metadata = pyexiv2.ImageMetadata(file_name)
metadata.read()
## exif_keys = metadata.exif_keys
metadata["Exif.GPSInfo.GPSLatitude"] = exiv_lat
metadata["Exif.GPSInfo.GPSLatitudeRef"] = lat_deg[3]
metadata["Exif.GPSInfo.GPSLongitude"] = exiv_lng
metadata["Exif.GPSInfo.GPSLongitudeRef"] = lng_deg[3]
metadata["Exif.Image.GPSTag"] = 654
metadata["Exif.GPSInfo.GPSMapDatum"] = "WGS-84"
metadata["Exif.GPSInfo.GPSVersionID"] = '2 0 0 0'
metadata.write()
0
pyexiv2現已棄用,取而代之的GExiv2,基於GObject的- 包裝周圍libexiv2。
相關問題
- 1. 在Python中使用「不等於」的最佳方式是什麼?
- 2. 在python中使用web服務的最佳方式是什麼?
- 3. 什麼是以編程方式使用Gmail的最佳方式?
- 4. 用Google App Engine學習Python 2.7的最佳方式是什麼?
- 5. 從Python調用Java代碼的最佳方式是什麼?
- 6. python中交互式調試的最佳方式是什麼?
- 7. 什麼是查詢的最佳方式?
- 8. 鍵入()的最佳方式是什麼?
- 9. 什麼是開源的最佳方式?
- 10. 「投票」的最佳方式是什麼?
- 11. 類,什麼是使用方法的最佳方式?
- 12. 什麼是使用工廠模式的最佳方式?
- 13. 使用webpack樣式表的最佳方式是什麼?
- 14. 什麼是使用Selenium PageObject設計模式的最佳方式
- 15. 在Python正則表達式中使用OR的最佳方式是什麼
- 16. 對於python,SLIME最接近什麼? /從EMACS使用python的最佳方式是什麼?
- 17. 什麼是安裝兩個版本的python的最佳方式
- 18. 用戶名密碼使用API的最佳方式是什麼?
- 19. 使用MVC調用控制器的最佳方式是什麼?
- 20. 使用jquery調用.net webservice的最佳方式是什麼?
- 21. 最佳實踐 - 什麼是觀看目錄的最佳方式
- 22. 最佳匹配額定配對的最佳方式是什麼?
- 23. 什麼是使用symfony2中的前端庫的最佳方式
- 24. 什麼是使用Delphi的Web數據庫的最佳方式?
- 25. 什麼是使用java swing的日期的最佳方式
- 26. 在mysql中存儲python timedelta值的最佳方式是什麼?
- 27. 在Python中實現「from。import *」的最佳方式是什麼?
- 28. 在OS X上安裝python 2的最佳方式是什麼?
- 29. 將表格數據放入python的最佳方式是什麼?
- 30. 在Python中創建「runner」腳本的最佳方式是什麼?
謝謝。這會適用於其他圖像格式,如bmp,png,tiff,pgm等? – 2013-10-20 19:34:40