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

Windows11下用Python3.10提取.heic图片元数据的问题

解决Windows 11 + Python 3.10提取HEIC图片元数据的问题

针对在Windows 11 + Python 3.10环境下提取HEIC元数据遇到的问题,以下是几个可行的解决方案:

1. 用pyheif-with-libheif读取元数据

原版pyheif无Windows预编译包,可安装带依赖的pyheif-with-libheif,内置libheif无需额外编译:

pip install pyheif-with-libheif

示例代码:

import pyheif
import exifread
from io import BytesIO

# 打开HEIC文件
heif_file = pyheif.open("path/to/img.heic")
# 获取原始EXIF数据
exif_raw = heif_file.metadata.get("Exif")
if exif_raw:
    # 用ExifRead解析
    tags = exifread.process_file(BytesIO(exif_raw))
    for tag, value in tags.items():
        print(f"{tag}: {value}")

2. 用pillow-heif扩展Pillow支持HEIC

原生Pillow不支持HEIC,安装pillow-heif扩展后即可读取:

pip install pillow-heif

示例代码:

from PIL import Image
from pillow_heif import register_heif_opener

# 注册HEIC解码器
register_heif_opener()

img = Image.open("path/to/img.heic")
# 获取并遍历EXIF元数据
exif = img.getexif()
for tag_id, value in exif.items():
    tag_name = Image.ExifTags.TAGS.get(tag_id, tag_id)
    print(f"{tag_name}: {value}")

3. 用ExifTool(命令行工具)

如果Python库仍有兼容性问题,可使用成熟的ExifTool工具:

  1. 下载ExifTool Windows版本,将exiftool.exe放入系统PATH或项目目录
  2. Python调用示例:
import subprocess
import json

# 调用ExifTool获取JSON格式的元数据
result = subprocess.run(
    ["exiftool", "-j", "path/to/img.heic"],
    capture_output=True,
    text=True
)
exif_data = json.loads(result.stdout)[0]
for key, value in exif_data.items():
    print(f"{key}: {value}")

之前尝试失败的原因

  • ExifRead的HEIC解析模块兼容性有限,无法处理包含hdlr盒子的特定HEIC文件
  • 原版pyheif依赖libheif库,Windows环境无预编译包,手动编译门槛高
  • 原生Pillow未内置HEIC解码器,必须安装扩展才能支持

内容的提问来源于stack exchange,提问作者K.Mulier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 23:35:34