Python 如何将PNG图像转换为透明GIF?

Python 如何将PNG图像转换为透明GIF?,python,python-imaging-library,png,transparency,gif,Python,Python Imaging Library,Png,Transparency,Gif,我正在尝试将背景透明的PNG图像列表转换为GIF,同时保持背景透明。我把我找到的这段代码改编成: 导入操作系统 从PIL导入图像 #创建框架 帧=[] path=“directory/to/my/png/images” 对于os.listdir(路径)中的帧: 新建帧=图像。打开(路径+“/”+帧) frames.append(新的_帧) #保存到GIF文件中 帧[0]。保存(路径+“/../output/animation.gif”,format='gif', 追加图片=帧[1:], save

我正在尝试将背景透明的PNG图像列表转换为GIF,同时保持背景透明。我把我找到的这段代码改编成:

导入操作系统
从PIL导入图像
#创建框架
帧=[]
path=“directory/to/my/png/images”
对于os.listdir(路径)中的帧:
新建帧=图像。打开(路径+“/”+帧)
frames.append(新的_帧)
#保存到GIF文件中
帧[0]。保存(路径+“/../output/animation.gif”,format='gif',
追加图片=帧[1:],
save_all=True,
持续时间=41,循环=1,透明度=0)
它正在打开文件夹中的所有PNG图像,并将它们导出为GIF,但背景是黑色的。我已经看过了,但是我似乎不明白透明度参数是如何工作的,或者我认为我用错了。所以,你也不会得到任何平滑的透明胶片,像素要么是完全透明的,要么是不透明的

处理具有
RGBA
Image
对象时,请在保存之前尝试将所有图像转换为模式
PA
。也许,这有助于自动控制

假设我们有以下三幅图像:

最小化的代码如下所示:

从PIL导入图像
frames=[Image.open('red.png')、Image.open('green.png')、Image.open('blue.png')]
帧[0]。保存('test.gif',format='gif',
追加图片=帧[1:],
save_all=True,
持续时间=200,循环=0,透明度=0)
生成的GIF实际上没有反映单个PNG的透明度,GIF完全损坏:

将转换添加到模式
PA
,代码可能如下所示:

从PIL导入图像
frames=[Image.open('red.png')、Image.open('green.png')、Image.open('blue.png')]
frames=[frame.convert('PA')表示帧中的帧]
帧[0]。保存('test.gif',format='gif',
追加图片=帧[1:],
save_all=True,
持续时间=200,循环=0,透明度=0)
而且,结果很好,保持了透明度:

我不知道,这条路线是否适用于任意PNG,但它值得使用您的图像进行测试,不是吗?如果这不起作用,您需要提供一些输入图像以供进一步测试

最后一种方法是将PNG中的所有透明像素替换为某种颜色,比如纯黄。以后保存GIF时,您需要确保所有图像的选项板都在同一索引中存储该纯黄色,然后最后将
透明度设置为该索引

----------------------------------------
系统信息
----------------------------------------
平台:Windows-10-10.0.16299-SP0
Python:3.9.1
枕头:8.1.0
----------------------------------------

try transparency=100?我尝试了0、100和255,但它们似乎都没有改变某些内容,或者尝试使用new_frame=Image.open(path+“/”+frame,mode='RGBA')或frames[0]。保存(path+“/../output/animation.gif”,format='gif',append_images=frames[1:],save_all=True,duration=41,loop=1,transparency=0,mode='RGBA')我不确定默认情况下PIL是如何读取图像的,请尝试查找这些图像,并确保默认情况下它们是使用alpha通道(提供透明性的通道)在open()模式下保存的,仅对应于读/写而不是RGBA。我在保存中尝试了mode='RGBA',但没有成功谢谢,成功了。然而,有很多噪音,但我想我不能做任何更好的GIF格式(我的文件真的很大)