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

如何从EXIF提取修改日期?get_ifd(0x0132)返回空值问题

问题成因

Pillow 中Exif对象的get_ifd()方法设计用途是读取IFD(图像文件目录)子节点内容,仅当传入的标签是IFD指针类标签时才会返回有效数据。这类标签的存储值是子IFD的文件偏移地址,比如你输出结果里的34853(GPS信息IFD指针)、34665(Exif子IFD指针),才是get_ifd()的合法入参。
ModifyDate标签(标签号0x0132,对应十进制306)是根EXIF目录下的普通值标签,不是IFD入口指针。把这个标签号传入get_ifd()时,程序会尝试查找编号为0x0132的子IFD,该子IFD不存在,因此返回空字典。

正确提取方式

直接从根EXIF字典中读取对应标签值即可,不需要调用get_ifd():

from PIL import Image

def get_exif(filename):
    image = Image.open(filename)
    image.verify()
    return image.getexif()

def get_exif_date(exif):
    # 0x0132 为ModifyDate对应的标签号,直接读取即可
    return exif.get(0x0132)

ff = 'path/to/file.jpg'
image_exif = get_exif(ff)
image_date = get_exif_date(image_exif)
print(image_date)
# 对应示例输出:2021:05:02 17:27:18

如果需要兼容部分设备把日期类标签存在Exif子IFD的场景,可以增加兜底逻辑:

def get_exif_date(exif):
    # 优先读取根目录的ModifyDate
    modify_date = exif.get(0x0132)
    if not modify_date:
        # 读取Exif子IFD下的拍摄日期、数字化日期兜底
        exif_ifd = exif.get_ifd(34665)
        modify_date = exif_ifd.get(0x9003) or exif_ifd.get(0x9004)
    return modify_date

内容的提问来源于stack exchange,提问作者LA_

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:48:45