为什么我不能从PIL.Image.Image文件生成GIF,但可以使用PIL.PngImagePlugin.PngImageFile生成GIF?

2024-05-14 17:39:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

imgs = [Image.open(f) for f in os.listdir(os.getcwd())]
imgs[0].save('{}.gif'.format(img_filename),
                              format='GIF',
                              append_images=imgs[1:],
                              save_all=True,
                              duration=args.duration,
                              loop=0)

这工作正常,输出GIF实际上是动画的。我注意到列表glitched_imgs在本例中由PIL.PngImagePlugin.PngImageFile对象组成

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

imgs = [get_randomized_image() for _ in range(args.frames)]
imgs[0].save('{}.gif'.format(img_filename),
                              format='GIF',
                              append_images=imgs[1:],
                              save_all=True,
                              duration=args.duration,
                              loop=0)

其中get_randomized_image()返回随机的Image对象,特别是从numpy数组返回

    # Inside `get_glitched_image()`
    return Image.fromarray(outputarr, img_mode)

我想用这个函数返回的对象列表直接生成一个GIF,我如何才能实现这一点

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


Tags: 文件对象imageformat列表imggetsave

热门问题