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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 22:42:22