保存在枕头GIF动画

问题描述 投票:6回答:3

(Python的3.4,PIL,1.1.7,2.5.1枕头)

我预计到复制原始GIF。

from PIL import Image
im = Image.open(filename)
im.save('temp.gif')

相反,它保存第一帧为静止。

我究竟做错了什么?

python pillow
3个回答
6
投票

使用枕头上Github上,here找到该脚本。

 import ImageSequence
 import Image
 import gifmaker
 sequence = []

 im = Image.open(....)

 # im is your original image
 frames = [frame.copy() for frame in ImageSequence.Iterator(im)]

 # write GIF animation
 fp = open("out.gif", "wb")
 gifmaker.makedelta(fp, frames)
 fp.close()

8
投票

可以看到,gifmaker脚本的新版本仅使用保存方法与GIF特殊kwargs。

作为文档状态(https://pillow.readthedocs.org/en/latest/handbook/image-file-formats.html#saving-sequences):

当调用save(),如果使用多帧图像,在默认情况下只有第一帧将被保存。要保存所有的帧,SAVE_ALL参数必须是存在并设置为True。

如果存在,循环参数可以被用来设置的次数的GIF应该循环,持续时间参数可以设置每个帧之间的毫秒数。


5
投票

版本,只需要枕头的作品:

from PIL import Image

width = 300
height = 300
im1 = Image.new("RGBA", (width, height), (255, 0, 0))
im2 = Image.new("RGBA", (width, height), (255, 255, 0))
im3 = Image.new("RGBA", (width, height), (255, 255, 255))
im1.save("out.gif", save_all=True, append_images=[im2, im3], duration=100, loop=0)

使用现有的图片:

from PIL import Image

im1 = Image.open('a.png')
im2 = Image.open('b.png')
im3 = Image.open('c.png')
im1.save("out.gif", save_all=True, append_images=[im2, im3], duration=100, loop=0)

而且,枕头太低版本默默地失败这里是作为奖金版本库版本检查:

from packaging import version
from PIL import Image

im1 = Image.open('a.png')
im2 = Image.open('b.png')
im3 = Image.open('c.png')
if version.parse(Image.PILLOW_VERSION) < version.parse("3.4"):
    print("Pillow in version not supporting making animated gifs")
    print("you need to upgrade library version")
    print("see release notes in")
    print("https://pillow.readthedocs.io/en/latest/releasenotes/3.4.0.html#append-images-to-gif")
else:
    im1.save("out.gif", save_all=True, append_images=[
             im2, im3], duration=100, loop=0)
© www.soinside.com 2019 - 2024. All rights reserved.