Ошибка при попытке получить теги 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)