5

次のコードを使用して、iPhone で撮影した画像の位置情報を抽出しています。

from PIL import Image
from PIL.ExifTags import TAGS

def get_exif(fn):
    ret = {}
    i = Image.open(fn)
    info = i._getexif()
    for tag, value in info.items():
        decoded = TAGS.get(tag, tag)
        ret[decoded] = value
    return ret

a = get_exif('photo2.jpg')
print a

これは私が返された結果です:

    {
    'YResolution': (4718592, 65536),
    41986: 0,
    41987: 0,
    41990: 0,
    'Make': 'Apple',
    'Flash': 32,
    'ResolutionUnit': 2,
    'GPSInfo': {
        1: 'N',
        2: ((32, 1), (4571, 100), (0, 1)),
        3: 'W',
        4: ((117, 1), (878, 100), (0, 1)),
        7: ((21, 1), (47, 1), (3712, 100))
    },
    'MeteringMode': 1,
    'XResolution': (4718592, 65536),
    'ExposureProgram': 2,
    'ColorSpace': 1,
    'ExifImageWidth': 1600,
    'DateTimeDigitized': '2011:03:01 13:47:39',
    'ApertureValue': (4281, 1441),
    316: 'Mac OS X 10.6.6',
    'SensingMethod': 2,
    'FNumber': (14, 5),
    'DateTimeOriginal': '2011:03:01 13:47:39',
    'ComponentsConfiguration': '\x01\x02\x03\x00',
    'ExifOffset': 254,
    'ExifImageHeight': 1200,
    'Model': 'iPhone 3G',
    'DateTime': '2011:03:03 10:37:32',
    'Software': 'QuickTime 7.6.6',
    'Orientation': 1,
    'FlashPixVersion': '0100',
    'YCbCrPositioning': 1,
    'ExifVersion': '0220'
}

それで、実際の座標の GPSInfo 値 (DMS) を 10 進度に変換する方法を知りたいですか? また、2つのウエストがリストされているようです. . . ?

4

2 に答える 2

9

これを行う方法は、pyexiv2 を使用して数か月前に書いたスクリプトに合わせたものです。

a = get_exif('photo2.jpg')
lat = [float(x)/float(y) for x, y in a['GPSInfo'][2]]
latref = a['GPSInfo'][1]
lon = [float(x)/float(y) for x, y in a['GPSInfo'][4]]
lonref = a['GPSInfo'][3]

lat = lat[0] + lat[1]/60 + lat[2]/3600
lon = lon[0] + lon[1]/60 + lon[2]/3600
if latref == 'S':
    lat = -lat
if lonref == 'W':
    lon = -lon

これにより、あなたの写真の緯度と経度が次のようになります: 32.7618333, -117.146333 (Lance Lee と同じ結果)。

GPSInfo の最後のエントリは、画像の見出しである場合があります。exiv2 や exiftools など、さまざまな EXIF 値に適切な名前を付けるツールを使用して、これを確認できます。

于 2011-06-24T07:27:21.953 に答える
1

http://www.exiv2.org/tags.html そのページで文字列「Exif.GPSInfo.GPSLatitude」を見つけます。3 つのペア (有理数を表す) が得られ、ペアの 2 番目の数値が分母であるように見えます。経度の後にあるのは高度だと思いますが、GPS タイムスタンプの方が適しています。

この例では:

32/1 + (4571 / 100)/60 + (0 / 1)/3600 = 32.761833 N
117/1 + (878 / 100)/60 + (0 / 1)/3600 = 117.146333 W

この写真は 4646 Park Blvd, San Diego, CA 92116 の近くで撮影されたものですか? そうでない場合は、この回答を無視してください。

于 2011-06-23T22:22:50.737 に答える