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

使用exifread读取HEIC图片时遇'hdlr'错误,如何获取元数据?

解决ExifRead读取HEIC图片时的NoParser: hdlr错误

错误原因

你遇到的NoParser: hdlr错误,是因为ExifRead 3.0.0的HEIC解析模块未实现对hdlr类型box的解析逻辑,而目标HEIC图片恰好包含该未被支持的box。

解决方案

方案1:升级ExifRead到最新版本

执行以下命令升级库,新版本大概率已经补充了对hdlr box的解析支持:

pip install --upgrade exifread

升级完成后重新运行你的原有代码即可。

方案2:手动修改ExifRead的HEIC解析代码(临时修复)

如果升级后问题依旧,可以手动添加对hdlr box的忽略逻辑:

  1. 找到你的Python环境中ExifRead安装目录下的heic.py文件(示例路径:c:\Users\Admin\anaconda3\envs\scrape\lib\site-packages\exifread\heic.py)
  2. 在文件中找到HEICParser类内的defs字典,添加一行解析规则:
    'hdlr': lambda box: None,
    
  3. 保存文件后重新运行代码,解析器会跳过hdlr box,继续提取其他可解析的元数据。

方案3:换用更成熟的HEIC元数据读取库

如果ExifRead的HEIC支持仍存在局限性,可以使用pyheif配合Pillow实现元数据读取:

from pathlib import Path
import pyheif
from PIL import Image
from PIL.ExifTags import TAGS

def extract_heic_exif(file_path):
    heif_file = pyheif.read(file_path)
    # 遍历元数据,找到Exif类型的内容
    for meta in heif_file.metadata:
        if meta['type'] == 'Exif':
            # 利用Pillow解析Exif数据
            temp_img = Image.new('RGB', (1, 1))
            temp_img.info['exif'] = meta['data']
            exif_dict = temp_img._getexif()
            # 转换为易读的标签名
            return {TAGS.get(tag_code): value for tag_code, value in exif_dict.items()}
    return {}

# 测试代码
target_dir = Path(r'C:\Users\Admin\Pictures\Apple media files\gallery\202204')
heic_list = list(target_dir.glob('**/*.HEIC'))
if heic_list:
    exif_data = extract_heic_exif(heic_list[0])
    print(exif_data)

安装所需依赖:

pip install pyheif pillow

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 23:15:29