Интерпретация GPS-информации exif-данных с фото в python

Я пишу небольшую программу, чтобы получить GPS-информацию о фотографии iphone jpg.

Библиотека, которую я использую, представляет собой PIL в python. Теперь я могу получить GPSInfo, что-то вроде:

{1: 'N', 2: ((1, 1), (20, 1), (5365, 100)), 3: 'E', 4: ((103, 1), (41, 1), (1052, 100)), 5: 0, 6: (43, 1), 7: ((15, 1), (32, 1), (7, 1)), 16: 'T', 17: (77473, 452), 29: '2013:10:25'} 

Как я могу это интерпретировать? И я замечаю, что тег не является непрерывным, так есть ли какой-нибудь лист мошенничества, на который я могу ссылаться, чтобы лучше понять все числовые теги и что они означают? Спасибо!

ОБНОВЛЕНИЕ

Извините, я понял это. В PIL lib есть функция GPSTAGS.get (), которая может помочь мне декодировать ключ в gps-информации. Спасибо вам, ребята!

 gpsinfo = {} for key in exif['GPSInfo'].keys(): decode = ExifTags.GPSTAGS.get(key,key) gpsinfo[decode] = exif['GPSInfo'][key] print gpsinfo 

и вот результат

 {'GPSTimeStamp': ((15, 1), (32, 1), (7, 1)), 'GPSImgDirectionRef': 'T', 'GPSImgDirection': (77473, 452), 'GPSLongitude': ((103, 1), (41, 1), (1052, 100)), 'GPSLatitudeRef': 'N', 29: '2013:10:25', 'GPSAltitude': (43, 1), 'GPSLatitude': ((1, 1), (20, 1), (5365, 100)), 'GPSLongitudeRef': 'E', 'GPSAltitudeRef': 0} 

2 Solutions collect form web for “Интерпретация GPS-информации exif-данных с фото в python”

Используйте модуль exifread.

Вот очень полезный

 import exifread as ef # barrowed from # https://gist.github.com/snakeye/fdc372dbf11370fe29eb def _convert_to_degress(value): """ Helper function to convert the GPS coordinates stored in the EXIF to degress in float format :param value: :type value: exifread.utils.Ratio :rtype: float """ d = float(value.values[0].num) / float(value.values[0].den) m = float(value.values[1].num) / float(value.values[1].den) s = float(value.values[2].num) / float(value.values[2].den) return d + (m / 60.0) + (s / 3600.0) def getGPS(filepath): ''' returns gps data if present other wise returns empty dictionary ''' with open(filepath, 'r') as f: tags = ef.process_file(f) latitude = tags.get('GPS GPSLatitude') latitude_ref = tags.get('GPS GPSLatitudeRef') longitude = tags.get('GPS GPSLongitude') longitude_ref = tags.get('GPS GPSLongitudeRef') if latitude: lat_value = _convert_to_degress(latitude) if latitude_ref.values != 'N': lat_value = -lat_value else: return {} if longitude: lon_value = _convert_to_degress(longitude) if longitude_ref.values != 'E': lon_value = -lon_value else: return {} return {'latitude': lat_value, 'longitude': lon_value} return {} file_path = 'file path of the file' gps = getGPS(file_path) print gps 

OP, уже опубликовал решение с использованием PIL. Если вы хотите просто получить GPS-информацию с Python, вы можете получить ее, используя exifread

Установка пакета с помощью pip

 $ pip install exifread 

и получить данные GPS

 In [10]: import exifread In [11]: tags = exifread.process_file(open('./tests/demo-project/content/test.jpg', 'rb')) In [12]: geo = {i:t[i] for i in t.keys() if i.startswith('GPS')} In [13]: geo Out[13]: {'GPS GPSAltitude': (0x0006) Ratio=186188/239 @ 898, 'GPS GPSAltitudeRef': (0x0005) Byte=0 @ 722, 'GPS GPSDate': (0x001D) ASCII=2015:12:06 @ 954, 'GPS GPSDestBearing': (0x0018) Ratio=43771/526 @ 946, 'GPS GPSDestBearingRef': (0x0017) ASCII=T @ 806, 'GPS GPSImgDirection': (0x0011) Ratio=43771/526 @ 938, 'GPS GPSImgDirectionRef': (0x0010) ASCII=T @ 782, 'GPS GPSLatitude': (0x0002) Ratio=[46, 3803/100, 0] @ 850, 'GPS GPSLatitudeRef': (0x0001) ASCII=N @ 674, 'GPS GPSLongitude': (0x0004) Ratio=[13, 2429/100, 0] @ 874, 'GPS GPSLongitudeRef': (0x0003) ASCII=E @ 698, 'GPS GPSSpeed': (0x000D) Ratio=139/50 @ 930, 'GPS GPSSpeedRef': (0x000C) ASCII=K @ 758, 'GPS GPSTimeStamp': (0x0007) Ratio=[10, 37, 33] @ 906, 'GPS Tag 0x001F': (0x001F) Ratio=30 @ 966} 
Python - лучший язык программирования в мире.