You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PIL.ExifTags提取图片元数据遇报错,求解决方案

问题解决:PIL提取EXIF报错与exif命令未识别

一、PIL调用_getexif()出现AttributeError的解决

问题原因

cv2.imread()读取图片时会自动丢弃EXIF元数据,转换为PIL图像后,pil_img._getexif()返回None,调用.items()自然触发AttributeError。

解决方法

方法1:直接用PIL读取图片(推荐)

如果不需要先用cv2处理图像,直接用PIL打开即可保留EXIF信息:

from PIL import Image
from PIL.ExifTags import TAGS

# 直接用PIL读取图片,保留EXIF
pil_img = Image.open("keyboard.png")

# 先判断EXIF是否存在,避免报错
exif_data = pil_img._getexif()
if exif_data:
    exif = {
        TAGS[k]: v 
        for k, v in exif_data.items()
        if k in TAGS
    }
else:
    print("图片无EXIF元数据或无法读取")

方法2:必须用cv2处理时,单独读取EXIF

若需先用cv2处理图像,可借助第三方库piexif单独读取EXIF:

  1. 安装依赖:pip install piexif
  2. 代码示例:
import cv2
import numpy as np
from PIL import Image
from PIL.ExifTags import TAGS
import piexif

# cv2处理图像逻辑不变
img = cv2.imread("keyboard.png")
convert = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
pil_img = Image.fromarray(convert)

# 单独读取原图片的EXIF数据
exif_data = piexif.load("keyboard.png")
# 转换为易读格式
exif = {}
for tag_id in exif_data["Exif"]:
    tag = TAGS.get(tag_id, tag_id)
    exif[tag] = exif_data["Exif"][tag_id]

# 读取GPS信息
gps_info = exif_data.get("GPS", {})

二、终端exif命令未识别的解决

问题原因

Windows系统默认没有exif命令,该命令由第三方工具(如ExifTool)提供,未安装则会报错。

解决方法

方法1:安装ExifTool

  1. 下载对应系统的ExifTool版本(Windows选择.exe格式)
  2. 将下载的exiftool.exe重命名为exif.exe,放到系统环境变量PATH包含的文件夹(如C:\Windows\System32)
  3. 重启终端后即可使用exif命令

方法2:用Python库替代命令行

无需额外安装命令行工具,直接用piexif或PIL读取EXIF,即上述代码中的处理方式,更适配Python开发场景。

内容的提问来源于stack exchange,提问作者ThisGuyThatGuy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 02:31:09