2009-01-17 50 views

回答

3

pexif與地理標記作爲一個目標(我的重點)寫的:

pexif是一個Python庫分析,更重要的編輯EXIF數據在JPEG文件中。

這從增長需要將GPS標記的數據添加到我的圖像,不幸的是,其他庫無法做更新,似乎並不容易架構,以便能夠添加這樣的事情。不可重複使用的軟件盛大!

我寫這個的主要原因是提供地理標記我的照片,一個簡單的方法,和庫現在似乎已經成熟到足以做到這一點。

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])) 
+0

謝謝。這會適用於其他圖像格式,如bmp,png,tiff,pgm等? – 2013-10-20 19:34:40

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。

相關問題