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

使用Python保存GIF仅生成首帧,无法完整复制动图求助

解决PIL复制GIF仅保留第一帧的问题

你的代码只保存了GIF的第一帧,原因是Image.open()默认仅加载GIF的首帧,而且没有处理动画所需的帧序列、延迟时间等元数据。要完整复制动图,需要遍历所有帧并保留动画参数,修正后的代码如下:

from PIL import Image

with Image.open('1.gif') as img:
    # 收集GIF的所有帧
    frames = []
    try:
        while True:
            frames.append(img.copy())
            img.seek(img.tell() + 1)
    except EOFError:
        # 遍历完所有帧后触发,正常结束循环
        pass

    # 生成1-9号GIF副本
    for a in range(1, 10):
        if frames:
            frames[0].save(
                f"{a}.gif",
                save_all=True,
                append_images=frames[1:],
                loop=img.info.get("loop", 0),
                duration=img.info.get("duration", 100)
            )

关键说明:

  • 遍历所有帧:通过seek()方法切换到下一帧,直到抛出EOFError(GIF帧遍历完成的标志),用copy()复制当前帧避免引用冲突
  • 保存动画参数:必须设置save_all=True并通过append_images传入后续帧,才能生成完整动图
  • 保留原动画效果:从原GIF的info字典中读取loop(循环次数)和duration(每帧延迟时间),确保副本和原动图效果一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 14:54:09