Рубрики
Без рубрики

Получение фото метаданных (EXIF) с помощью Python

Получите практические, реальные навыки Python на наших ресурсах и пути

Автор оригинала: Mike Driscoll.

На прошлой неделе я пытался узнать, как получить метаданные моей фотографии. Я заметил, что Windows может отображать модель камеры, дату создания и множество других данных на моих фотографиях, но я не мог вспомнить, что называемые эти данные. Я наконец нашел то, что искал. Термин EXIF (обмен файл файла изображения). Для этого поста мы посмотрим на различные пакеты 3-го вечеринок, которые дают вам доступ к этой информации.

Моя первая мысль была то, что Библиотека визуализации Python будет иметь эту функциональность, но я еще не нашел срок exif и не мог найти эту информацию в справочнике Pil без него. К счастью, я в конце концов нашел способ использовать PIL через Резьба стоковой двери Отказ Вот метод, который он показал:

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

Это работает довольно хорошо и возвращает хороший словарь. Есть несколько полей, которые я нашел бесполезно, например, поле «Makernote», который выглядел как много шестнадцатеричных значений, поэтому вы, вероятно, хотите только использовать определенные данные данных. Вот образец какой-то информации, которую я вернулся:

{'YResolution': (180, 1), 
 'ResolutionUnit': 2, 
 'Make': 'Canon', 
 'Flash': 16, 
 'DateTime': '2009:09:11 11:29:10', 
 'MeteringMode': 5, 
 'XResolution': (180, 1), 
 'ColorSpace': 1, 
 'ExifImageWidth': 3264, 
 'DateTimeDigitized': '2009:09:11 11:29:10', 
 'ApertureValue': (116, 32), 
 'FocalPlaneYResolution': (2448000, 169), 
 'CompressedBitsPerPixel': (3, 1), 
 'SensingMethod': 2, 
 'FNumber': (35, 10), 
 'DateTimeOriginal': '2009:09:11 11:29:10', 
 'FocalLength': (26000, 1000), 
 'FocalPlaneXResolution': (3264000, 225), 
 'ExifOffset': 196, 
 'ExifImageHeight': 2448, 
 'ISOSpeedRatings': 100, 
 'Model': 'Canon PowerShot S5 IS', 
 'Orientation': 1, 
 'ExposureTime': (1, 200), 
 'FileSource': '\x03', 
 'MaxApertureValue': (116, 32), 
 'ExifInteroperabilityOffset': 3346, 
 'FlashPixVersion': '0100', 
 'FocalPlaneResolutionUnit': 2, 
 'YCbCrPositioning': 1, 
 'ExifVersion': '0220'}

Я не знаю, что означают все эти ценности, но я знаю, что могу использовать некоторые из них. Моя цель для желания данных – это расширение моего просмотра моего простого изображения, так что он может отображать больше информации для пользователя о своей фотографии.

Вот несколько других библиотек, которые я обнаружил, что может дать доступ к данным EXIF:

Я попробовал Python Exif Parser, и он работал довольно хорошо. Когда я пытался установить Pyexiv2 на моем коробке Python 2.5 на работе, я получил сообщение об ошибке о Python 2.6, который не найден, а затем запрашивается установщик. На веб-сайте Pyexiv2 нет того, что требуется определенная версия Python для работы, так что это было немного расстраивает. Большинство из этих модулей имеют мало или без документации, которая также была довольно разочарована. Из того, что я могу сказать, exif.py должен использоваться через командную строку, а не как импортируемый модуль.

Во всяком случае, обратно в Python Exif Parser. Это на самом деле проще в использовании, чем PIL. Вот все, что вам нужно сделать после копирования файла exif.py в ваш путь Python:

import exif
photo_path = "somePath\to\a\photo.jpg"
data = exif.parse(photo_path)

Код выше возвращается в основном ту же информацию о том, что фрагмент PIF, хотя он использует целые числа вместо Hex для «Makersnote», и он имеет несколько полей «Tag0xa406», тогда как данные PIFL имели некоторые числовые поля (которые я исключал выше). Я предполагаю, что они ссылаются на одну и ту же информацию по-разному.

Во всяком случае, если вы не должны бродить в Интернете, когда пытаетесь открыть эту информацию, надеюсь, вы будете наткнуться на этот пост, и он укажет вас в правильном направлении.