📘

PILで透過gifを処理した際、全フレームが重なってみえてしまう。

2022/04/17に公開

調べ方が悪かったのか解決まで時間に30分はかかった...
最終的にはstackoverflowの方で解決策を見つけました‼️

緑のボールが転がるようなgifをつくる
以下のコードだと

main.py
from PIL import Image

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

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)


前フレームが残ったようなgifができる
これは disposal=2 を渡すことで解決できるそう。

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

disposalの詳細はここにあるそう。
https://legacy.imagemagick.org/Usage/anim_basics/
https://legacy.imagemagick.org/Usage/anim_opt/
https://legacy.imagemagick.org/Usage/anim_mods/

参考
https://stackoverflow.com/questions/55313887/pil-is-showing-all-the-previous-frames-in-the-gif

Discussion