python - PIL 在 gif 中显示所有之前的帧

标签 python python-imaging-library gif

pillow version:5.4.1

问题是我可以看到 gif 中的所有帧。

期望:在具有 5 帧的 gif 的生命周期中,每个帧应该在一小部分时间内可见,并且在 gif 结束时只有第 5 帧应该是可见的。

实际:在我的例子中,在 gif 的末尾,我可以看到所有帧 1-2-3-4-5。

gif 动画中有 5 帧,所有帧都是 gif 格式(静态)我也尝试过使用 png 文件,但我得到了相同的结果。

我所有的框架都是透明背景。

from PIL import Image

frame_list = []
frame_list.append("object_1.gif")
frame_list.append("object_2.gif")
frame_list.append("object_3.gif")
frame_list.append("object_4.gif")
frame_list.append("object_5.gif")

images = []
for n in frame_list:
    frame = Image.open(n)
    images.append(frame)

images[0].save('anitest.gif',
               save_all=True,
               format='GIF',
               append_images=images[1:],
               duration=200,
               loop=0)

如果有人遇到同样的问题,请告诉我我做错了什么?

enter image description here

下面的代码使用 imageio 它可以工作,但我正在失去透明度并且它的比较 PIL 非常慢

images = []
for filename in names:
    images.append(imageio.imread(filename))
imageio.mimsave('anitest.gif', images,duration=0.3)

最佳答案

我认为“disposal” 设置不正确。尝试:

images[0].save('anitest.gif',
               save_all=True,
               format='GIF',
               append_images=images[1:],
               duration=200,disposal=2,
               loop=0)

enter image description here

关于python - PIL 在 gif 中显示所有之前的帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55313887/

相关文章:

python - 在不使用 Sprite 的情况下,如何在屏幕底部的移动图像和下落物体之间进行碰撞检测?

python - 修改代码以对两个列表求和(按元素)

python - Pandas 列加法/减法

Python:确保对象内属性类型的有效方法?

Python PIL-ImageGrab 捕获游戏像素时不准确

python - 使用 Python Pillow 的镜头模糊效果

python - TypeError:crop()从一到两个位置参数,但是给出了三个

Gif 只循环一次

ffmpeg - 在 FFMPEG 中将视频转换为 gif 时无法控制循环

animation - 在 Julia 中删除以前的数据/图(Plots.jl,GR 后端)