pil.image读jpeg exif返回空字典,主因是图像被重编码致exif剥离(如微信上传)、pil版本过旧,或仅解析jpeg app1段而忽略tiff/heic等格式;推荐用exifread或pillow≥9.0的getexif()方法。

Python 无法直接用标准库提取多媒体文件的 EXIF 元数据——必须依赖第三方库,且不同文件类型(JPEG vs MP4)需不同处理路径。
为什么 PIL.Image 读 JPEG EXIF 有时返回空字典?
常见原因是图像被重编码或 EXIF 被剥离(比如微信/钉钉上传后),也可能是 PIL 版本较老不支持某些嵌入格式。更关键的是:PIL.Image 默认只解析 JPEG 的 APP1 段,对 TIFF-EXIF 或 HEIC 等格式无能为力。
- 优先用
exifread或Pillow≥ 9.0 +.getexif()方法(返回ExifTags映射,更稳定) - 检查原始字节:用
open("img.jpg", "rb").read(1024)看开头是否有b"\xff\xd8\xff\xe1"(JPEG APP1 标记) - 若需完整字段(如 MakerNote),改用
exifread并传参details=True
MP4/MOV 视频的“EXIF”其实不是 EXIF,该用什么库?
MP4 使用的是 moov box 中的 udta 或 meta 盒子,存储结构与 JPEG 完全不同,PIL 和 exifread 均不支持。正确方案是:
SkillSub Pro - Python 题解与代码注释双功能技能功能概述SkillSub Pro - Python 题解与代码注释双功能技能是一项面向实际任务的技能,主要用于SkillSub Pro 是一个 Python 题解生成与代码注释的 双功能合体技能 ,专为学生、算法学习者和开发者设计;✅ 一个技能,两种用途 :;核心要点📝 题解模式 :输入题目/题号,自动生成完整 Python 题解(含详细注释、解题思路、复杂度分析);💬 注释模式 :输入 Python 代码,自动添加详细中。它将相关步骤、
- 用
mutagen:支持 MP4 的MP4类,可读写©cpy、©day、©nam等标准 QuickTime 元数据键 - 用
ffmpeg命令行 +json输出:执行ffmpeg -i video.mp4 -v quiet -print_format json -show_format -show_streams,再解析 JSON -
moviepy不提供元数据接口,别试
exifread 解析失败时,错误信息里出现 "ValueError: No EXIF information found" 怎么办?
这表示文件中确实没有 APP1 段(不是库的问题),但仍有其他元数据可能藏在别的位置:
- 检查是否为 PNG:它用
iTXt或tEXtchunk 存储,可用Pillow的.info字典获取(如img.info.get("pnginfo")) - 检查是否为 WebP:部分含 EXIF,但需 Pillow ≥ 8.3 且编译时启用了 libwebp 支持;否则会静默忽略
- 用
file命令确认真实类型:file -i photo.jpeg,防止扩展名误导(比如 .jpg 实为 BMP)
真正麻烦的是混合场景:一张图被转成 WebP 后又嵌入 MP4 封装,此时得先解封装再分段解析——工具链得自己串,没有“一个函数全搞定”的捷径。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










