尝试获取图像的 EXIF 标签时出错

Error while trying to get the EXIF tags of the image

我正在尝试获取 JPG 图片的 EXIF 标签。为此,我使用了 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'

我已经完成了文档中的所有操作,这里是关于 Whosebug 和 pypi 网站上的一些问题。一切都一样。我的代码:

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

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

那我该如何读取图片的 EXIF 标签呢?我做错了吗? 拜托,我很无知。这是一个奇怪的错误。

如果 EXIF 数据存在,Pillow 只会将 exif 键添加到 Image.info。因此,如果图像没有 EXIF 数据,您的脚本将 return 错误,因为密钥不存在。

您可以在Image file formats documentation.

中查看哪些图像格式支持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") 将 return 值为 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)