使用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
相关产品推荐
相关产品推荐

