我想通过从GIF中提取15个最好是不同的帧来压缩GIF图像。
我正在使用Python和Pillow库,但找不到任何方法来获取Pillow docs中GIF的帧数。我也没有找到如何从GIF中提取特定帧的方法,因为Pillow restricts that。
是否有任何方法可以提取帧而无需遍历每个帧? 是否有用于GIF处理的更高级的Python库?
答案 0 :(得分:2)
这里是@radarhere答案的扩展,它将.gif分为num_key_frames
个不同的部分,并将每个部分保存为新图像。
from PIL import Image
num_key_frames = 8
with Image.open('somegif.gif') as im:
for i in range(num_key_frames):
im.seek(im.n_frames // num_key_frames * i)
im.save('{}.png'.format(i))
结果被somegif.gif
分成8个,另存为0
.. 7.png
。
答案 1 :(得分:1)
对于帧数,您正在寻找n_frames-https://pillow.readthedocs.io/en/5.2.x/reference/plugins.html#PIL.GifImagePlugin.GifImageFile.n_frames。
from PIL import Image
im = Image.open('test.gif')
print("Number of frames: "+str(im.n_frames))
用于提取单个帧-
im.seek(20)
im.save('frame20.gif')