Python 为什么可以';我是否可以从PIL.Image.Image文件生成GIF,但可以使用PIL.PngImagePlugin.PngImageFile生成GIF?

Python 为什么可以';我是否可以从PIL.Image.Image文件生成GIF,但可以使用PIL.PngImagePlugin.PngImageFile生成GIF?,python,image,image-processing,python-imaging-library,Python,Image,Image Processing,Python Imaging Library,我正在尝试从多个图像文件生成GIF,如下所示 当我使用Image.open()从一个目录中打开一个物理文件,然后将列表添加到一个GIF文件中时,Kris的答案非常有效 imgs=[Image.open(f)for f in os.listdir(os.getcwd())] imgs[0]。保存(“{}.gif.”格式(img_文件名), format='GIF', 追加图片=imgs[1:], save_all=True, 持续时间=args.duration, 循环=0) 这工作正常,输出G

我正在尝试从多个图像文件生成GIF,如下所示

当我使用
Image.open()
从一个目录中打开一个物理文件,然后将列表添加到一个GIF文件中时,Kris的答案非常有效

imgs=[Image.open(f)for f in os.listdir(os.getcwd())]
imgs[0]。保存(“{}.gif.”格式(img_文件名),
format='GIF',
追加图片=imgs[1:],
save_all=True,
持续时间=args.duration,
循环=0)
这工作正常,输出GIF实际上是动画的。我注意到列表
glicted\u imgs
由本例中的
PIL.PngImagePlugin.PngImageFile
对象组成

但是,每当我尝试使用从函数返回的
图像
对象时,生成的GIF是完全静态的

imgs=[get_randomized_image()用于范围内的(args.frames)]
imgs[0]。保存(“{}.gif.”格式(img_文件名),
format='GIF',
追加图片=imgs[1:],
save_all=True,
持续时间=args.duration,
循环=0)
其中
get\u randomized\u image()
返回一个随机化的
image
对象,特别是从
numpy
数组返回

#在`get_glicted_image()中`
返回Image.fromarray(outputarr,img_模式)
我想用这个函数返回的对象列表直接生成一个GIF,我如何才能实现这一点


注意:我在第一种(工作)方法中打开的文件是我使用
get\u randomized\u images()
之前保存的文件,因此我可以向您保证它们完全相同。

您是否检查了随机列表中有多少图像?然后打印它们以查看它们的大小和模式,以确保它们匹配?也许可以通过更改为
return Image.fromarray(…).convert('RGBA')
@MarkSetchell来确保它们都是RGBA,我忘了提到,所以我添加了一个编辑。我在第一个(工作)方法中使用的图像是通过在同一函数中返回的
Image
对象上使用
.save()
创建的-
get\u randomized\u images()
。我只需在第一种(工作)方法中打开这些相同的文件,然后在第二种方法中直接使用
Image
对象。所以在这两种方法中,数据是完全相同的format@MarkSetchell同样是的,两种方法中列表的长度相同(对于这个特定用例为23)。如果打开PNG文件,将其转换为Numpy数组,然后转换回PIL图像并保存,你不一定会得到类似的文件。你有没有检查过随机列表中有多少图像?然后打印它们以查看它们的大小和模式,以确保它们匹配?也许可以通过更改为
return Image.fromarray(…).convert('RGBA')
@MarkSetchell来确保它们都是RGBA,我忘了提到,所以我添加了一个编辑。我在第一个(工作)方法中使用的图像是通过在同一函数中返回的
Image
对象上使用
.save()
创建的-
get\u randomized\u images()
。我只需在第一种(工作)方法中打开这些相同的文件,然后在第二种方法中直接使用
Image
对象。所以在这两种方法中,数据是完全相同的format@MarkSetchell同样是的,两种方法中列表的长度是相同的(对于这个特定用例是23)。如果您打开一个PNG文件,将其转换为Numpy数组,然后转换回PIL图像并保存,则不一定会得到类似的文件。