Ошибка при попытке получить теги EXIF ​​изображения

Я пытаюсь получить теги EXIF ​​изображения JPG. Для этого я используюpiexifмодуль.
Проблема в том, что я получаю ошибку -KeyError, говоря это:

Traceback (most recent call last):
  File "D:/PythonProjects/IMGDateByNameRecovery/recovery.py", line 98, in selectImages
    self.setExifTag(file_str)
  File "D:/PythonProjects/IMGDateByNameRecovery/recovery.py", line 102, in setExifTag
    exif = piexif.load(img.info["Exif"])
KeyError: 'Exif'

Я сделал все, как в документации, здесь по некоторым вопросам, Stackru и на сайте pypi. Все то же самое. Мой код:

    img = Image.open(file)
    exif_dict = piexif.load(img.info["exif"])

    altitude = exif_dict['GPS'][piexif.GPSIFD.GPSAltitude]
    print(altitude)

Как мне тогда прочитать EXIF-теги изображения? Я что делаю неправильно? Пожалуйста, я такой невежественный. Это такая странная ошибка.

2 ответа

Решение

Подушка только добавляет exif ключ к Image.infoесли данные EXIF ​​существуют. Поэтому, если изображения не имеют данных EXIF, ваш скрипт вернет ошибку, потому что ключ не существует.

Вы можете увидеть, какие форматы изображений поддерживают info["exif"]данные в документации по форматам файлов изображений.

Вы могли бы сделать что-то вроде этого...

img = Image.open(file)
exif_dict = img.info.get("exif")  # returns None if exif key does not exist

if exif_dict:
    exif_data = piexif.load(exif_dict
    altitude = exif_data['GPS'][piexif.GPSIFD.GPSAltitude]
    print(altitude)
else:
    pass
    # Do something else when there is no EXIF data on the image.

С помощью mydict.get("key") вернет значение None если ключ не существует где как mydict["key"] бросит KeyError.

Скажем, вы закодировали метаданные в MakerNotes. Обязательно установите следующие зависимости:

  • пиксейф
  • Подушка

Затем запустите следующий код, учитывая, что изображение Image.pngи находится в той же директории скрипта:

      from PIL import Image
import piexif
import pickle

img = Image.open('Image.png')

exif_dict = img.info.get("exif") # returns None if exif key does not exist
if exif_dict:
  exif_data = piexif.load(exif_dict)
  raw = exif_data['Exif'][piexif.ExifIFD.MakerNote]
  tags = pickle.loads(raw)
  print(tags)
Другие вопросы по тегам