Python无法读取文件夹中部分TIFF完整Header的问题咨询
TIFF文件元数据读取不全问题修复
问题根源
你用PIL的getexif()方法只能读取TIFF文件中APP1段的EXIF扩展数据,但TIFF格式的核心元数据(比如ImageWidth、ImageDescription这类Header信息)其实存在于TIFF的**IFD(图像文件目录)**结构中,不在EXIF段里。那些能正常读取完整数据的文件,大概率是额外把IFD信息写入了EXIF段,或者PIL对该类TIFF做了兼容映射。
解决方法
直接读取PIL Image对象的tag属性获取IFD中的核心元数据,同时保留getexif()读取EXIF扩展数据的逻辑,两者结合就能拿到完整的Header信息。
修改后的代码
import os from PIL import Image, ExifTags directory = "path_to_image_folder" for filename in os.listdir(directory): if filename.endswith(".tiff"): filepath = os.path.join(directory, filename) try: with Image.open(filepath) as image: # 读取TIFF核心IFD元数据(Header主要信息) tiff_tags = image.tag # 读取EXIF扩展数据 exif_tags = image.getexif() print(f"=== {filename} 完整元数据 ===") # 输出IFD核心元数据 if tiff_tags: for tag_id, value in tiff_tags.items(): tagname = ExifTags.TAGS.get(tag_id, tag_id) print(f"{tagname}: {value}") # 输出EXIF扩展数据(去重) if exif_tags: existing_tags = [ExifTags.TAGS.get(tid, tid) for tid in tiff_tags.keys()] for tag_id, value in exif_tags.items(): tagname = ExifTags.TAGS.get(tag_id, tag_id) if tagname not in existing_tags: print(f"{tagname}: {value}") if not tiff_tags and not exif_tags: print("无任何元数据") except Exception as e: print(f"{filename} - 错误: {e}")
说明
image.tag直接获取TIFF文件IFD中的原生元数据,包含ImageWidth、ImageDescription、BitsPerSample等Header核心字段image.getexif()补充读取EXIF扩展段的额外信息- 加入去重逻辑,避免IFD和EXIF中重复字段的重复输出
内容的提问来源于stack exchange,提问作者Boey
相关产品推荐
相关产品推荐

