python - 是否可以仅使用枕头库生成 gif 动画?

标签 python animation gif python-imaging-library

我希望能够将 numpy 数组转换为图像。首先,我学习了如何将 3D(高 x 宽 x 颜色)数组转换为图像。经过一些研究,我认为 PIL(或 Pillow)是最自然的方式。这就是我目前的做法(而且效果很好):

from PIL import Image
import numpy as np

if __name__ == '__main__':
    h = 4
    w = 8
    arr = np.zeros((h,w,3), dtype=np.uint8)

    arr[0, 0, :] = [255,255,0]
    arr[3, 7, :] = [0,255,0]

    img = Image.fromarray(arr, 'RGB')
    img.save('viz.png')

作为下一步,我希望能够获取 3D 数组(或 4D 数组,其中时间是附加维度)的列表并生成相应的动画。所以,到目前为止我还没有找到如何去做。

看起来 Pillow 能够读取 gif 动画。使用 ImageSequence 我们可以访问它的帧。但是,我不知道如何将一系列图像放入动画中。

我看到一些使用 ìmages2gif 的解决方案,但我想继续使用单个库。

已添加

答案 here不要回答我的问题。他们使用我什至无法通过 pip 安装的 gifmaker 库。

最佳答案

因此,问题的主要反对意见是在不使用工具的情况下生成由 3D 数组(帧)列表或 4D 矩阵(以宽度、高度、颜色和时间作为维度)表示的 gif 动画是 Python 的“外部”。

看起来 PIL 库无法做到这一点。至少在没有黑客攻击或解决方法的情况下,不是以一种简单的方式。但是,可以通过使用 moviepy 库来实现该目标。这是这个库提供的优雅解决方案:

import numpy as np
import moviepy.editor as mpy

def make_frame(t):

    h = 100
    w = 100

    ar = np.zeros((h, w, 3))

    for hi in range(h):
        for wi in range(w):
            for ci in range(3):
                ar[hi, wi, ci] = 255.0*t/15.0
    return ar


if __name__ == '__main__':

    clip = mpy.VideoClip(make_frame, duration=15.0)
    clip.write_gif('ani.gif', fps=15)

关于python - 是否可以仅使用枕头库生成 gif 动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36401912/

相关文章:

Python urlopen 不为亚马逊网站返回任何内容

css - 从底部旋转图像

javascript - 如何使用我自己的坐标向 OpenLayers 3 添加折线

java背景透明

python - 如何在Google App Engine中定义具有多对多关系的模型?

python - Django 中 Pisa 的 pdf 生成未呈现 CSS

python - 打开扭曲套接字客户端的 Django 命令留下空闲数据库连接

java - 将节点动画化到布局中

animation - 如何在 Gnuplot 中使用抗锯齿来制作 gif?

ios - 有没有一种方法可以对生成的GIF进行无损压缩?