为创建GIF的后续帧使用错误的背景颜色



我正在尝试将gif调整为更小的版本。
这是我现在想到的:

from PIL import Image
def process_gif(in_path, out_path= 'out.gif', size= (32,32)):
with Image.open(in_path) as im :
images = []
durations = []
for i in range(im.n_frames - 1, -1, -1):
im.seek(i)
im.thumbnail(size, Image.Resampling.LANCZOS) # noqa
im_temp = im.copy()
images.insert(0, im_temp)
durations.append(im.info['duration'])
images[0].save(
out_path,
format='gif',
interlace=True,
save_all=True,
append_images=images[1 :],
loop=0,
duration=durations,
disposal=2,
background=(255,255,255,255),
optimize=False
)

当我尝试创建GIF时,第一帧有正确的背景,其余帧有问题。
用这个gif作为输入输入。gif
我在保存之前得到了images中的那些帧:0 1 2 3
这是输出。gif

花了一些时间找出错误在哪里,没有线索,输出应该在GIF的每一帧都有透明的背景

注:我注意到imgur的透明框架,in.gif, 0, 1, 2, 3都有透明的背景,打开你的图像查看器应该会让你看得更好

在插入调整大小的图像之前,我在print(im_temp.info)中寻找透明度,注意,循环是向后解决另一个问题,所以它是最后一帧到第一帧

{'version': b'GIF89a', 'background': 0, 'loop': 0, 'duration': 70}
{'version': b'GIF89a', 'background': 0, 'loop': 0, 'duration': 70}
{'version': b'GIF89a', 'background': 0, 'loop': 0, 'duration': 70}
{'version': b'GIF89a', 'background': 0, 'loop': 0, 'duration': 70, 'transparency': 48, 'extension': (b'NETSCAPE2.0', 219)}
from PIL import GifImagePlugin
GifImagePlugin.LOADING_STRATEGY = GifImagePlugin.LoadingStrategy.RGB_AFTER_DIFFERENT_PALETTE_ONLY

使用这个解决了我的问题

最新更新