imageio:如何提高输出 gif 的质量?

nin*_*ing 7 python animation image gif freeimage

  • 我有一个 .png (PIL) 图像列表,我想将它们串成一个动画 gif
  • 为此,我目前正在使用该imageio
  • 但是,我找不到一种方法来制作高质量的gif

据我所知,我可以更改两种类型的设置。在imageio.imread()阅读.pngs设置和imageio.mimwrite()写GIF格式设置。根据imageio.help()

  1. imageio.imread()一个只读参数 for PNG-PILignoregamma它需要一个布尔值。这不会改变我的输出 gif 的任何内容。
  2. imageio.mimwrite()可以参考两种格式。第一个是GIF-PIL。这种格式的输出只显示一帧,因此是不可取的。输出在这里
  3. imageio.mimwrite()有第二种格式GIF-FI。这可以通过以下选项产生更有希望的输出:
    • 'quantizer':'wu'生成具有指定帧和帧速率的完整 gif,但会产生“损坏”的质量输出在这里
    • 'quantizer':'nq'生成一个完整的 gif,其质量比 'wu' 更好,但不能很好地处理颜色。注意右下角的图例是如何改变颜色的。输出在这里

这是迄今为止我可以获得的最佳质量的相关代码(GIF-FInq

def gen_gif(self, datetime_list):
    kwargs_write = {'fps':5.0, 'quantizer':'nq'}
    frames = []
    for datetime in datetime_list:
        frames.append(imageio.imread(datetime+'.png'))
    exportname = '{} to {}.gif'.format(datetime_list[0], datetime_list[-1])
    imageio.mimsave(exportname, frames, 'GIF-FI', **kwargs_write)
Run Code Online (Sandbox Code Playgroud)

该函数使用一个字符串列表参数调用,其中包含要编译为 gif 的 .png 图像的完整路径。

Gwe*_*wen 2

GIF 格式每帧只能处理 256 种颜色。该quantizer参数确定用于查找这些颜色的方法。

控制使用哪些颜色的最佳方法可能是自行减少颜色数量(至 256 种)。