如何在无法使用ExifTool的情况下用Python读取图片完整元数据
如何在无法使用ExifTool的情况下用Python读取图片完整元数据
嘿,我太懂这种无奈了——ExifTool确实是读取图片元数据的天花板工具,但受限于安全规则没法用的时候,只能找靠谱的替代方案。下面这几个Python库,能帮你尽可能获取到和ExifTool接近的完整元数据,比PIL只拿一小部分强多了:
pyexiv2:这是我最推荐的替代库,它支持读取Exif、IPTC、XMP三大主流元数据标准,几乎覆盖了ExifTool能获取的绝大多数常见字段,不管是JPG、PNG还是其他常见格式都能搞定。
安装命令:pip install pyexiv2
简单示例代码:import pyexiv2 with pyexiv2.Image("your_image.jpg") as img: # 分别读取三类元数据 exif = img.read_exif() iptc = img.read_iptc() xmp = img.read_xmp() # 合并成完整的元数据字典 all_meta = {**exif, **iptc, **xmp} # 遍历输出所有字段 for key, val in all_meta.items(): print(f"{key}: {val}")exifread:这个库虽然名字带Exif,但实际上能读取JPEG文件里的APP段信息等额外元数据,支持的格式也很广泛,用法也很直观。
安装命令:pip install exifread
示例代码:import exifread with open("your_image.jpg", "rb") as f: # 开启details=True可以获取更详细的元数据 tags = exifread.process_file(f, details=True) # 过滤掉缩略图等不需要的字段,打印其他内容 for tag_name in tags: if tag_name not in ('JPEGThumbnail', 'TIFFThumbnail', 'Filename'): print(f"{tag_name}: {tags[tag_name]}")rawpy(针对RAW格式图片):如果你需要处理相机原生的RAW格式,这个库能读取到普通库拿不到的相机原生元数据,非常专业。
安装命令:pip install rawpy
示例代码:import rawpy with rawpy.imread("your_raw_image.raw") as raw_img: # 获取所有RAW元数据 meta = raw_img.metadata for key, val in meta.items(): print(f"{key}: {val}")
需要注意的是,这些库没法做到和ExifTool完全一致的覆盖范围(毕竟ExifTool支持的格式和字段实在太全了),但对于绝大多数日常场景来说,已经足够获取到你需要的完整元数据了。如果遇到某个非常冷门的字段,可能需要针对图片格式的官方规范自己做一点解析,但这种情况很少见。
备注:内容来源于stack exchange,提问作者MikeHuber
相关产品推荐
相关产品推荐

