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

使用Pillow将Mode 1格式多帧TIFF转换为RGB格式多帧TIFF时仅保存单帧的问题排查

问题分析与解决

嘿,你遇到的问题根源很明确——你的代码只处理了多帧TIFF的第一帧,压根没遍历处理剩下的所有帧!

PIL库的Image.open()默认只会加载多帧TIFF的第一页,你直接对它做convert('RGB'),得到的也只是单帧的RGB图像,哪怕加了save_all=True,也只有这一帧能被保存下来。

修正后的代码

from PIL import Image

def convert_multiframe_tiff(file_path='test.tiff'):
    rgb_frames = []
    with Image.open(file_path) as img:
        try:
            while True:
                # 对当前帧进行RGB转换
                rgb_frame = img.convert('RGB')
                rgb_frames.append(rgb_frame)
                # 切换到下一帧,直到抛出EOFError表示所有帧处理完毕
                img.seek(img.tell() + 1)
        except EOFError:
            pass  # 所有帧处理完成
    
    # 保存所有RGB帧到新的多帧TIFF
    if rgb_frames:
        rgb_frames[0].save(
            fp='new.tiff',
            format="TIFF",
            save_all=True,
            append_images=rgb_frames[1:],  # 把剩下的帧追加进去
            compression="None"
        )
    return

关键修正点

  • 用seek()和tell()方法遍历多帧TIFF的每一页,直到触发EOFError(这是PIL处理多帧图像的标准方式)
  • 把每帧转换后的RGB图像存入列表,最后统一保存
  • 保存时通过append_images参数传入除第一帧外的所有帧,配合save_all=True实现多帧保存

额外小贴士

  • 可以先打印img.n_frames确认原TIFF的总帧数,验证是否真的是多帧文件
  • 如果原TIFF有自定义元数据,可能需要额外处理来保留这些信息(默认保存会丢失部分非标准元数据)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:12:40