在Google合作实验室上显示动画


TL; DR

如果您在Google合作实验室上绘制图像并设置动画效果,则可以轻松地按顺序吐出文件并将其设置为apng。

介绍

我想在Google Colab上进行计算,并将计算结果显示为动画。如果您正常执行此操作,则可以使用matplotlib对其进行可视化,但是在Colab上设置动画效果相当麻烦。首先,将图像分割成文件后,很容易在Colab上显示图像。

中,我对动画进行了大量的试验和错误,但是最后,最简单的方法是将其作为序列号文件吐出,然后将其转换为动画PNG(APNG)。

样例代码

安装APNG

在Google Colab的第一个单元格中安装APNG

1
!pip install APNG

可能会安装它,没有任何问题,您应该看到"成功安装了APNG-0.3.3"。

序列号文件输出

一切都很好,所以让我们写一个代码,将带有序列号的PNG文件吐出来。以下是一个动画,其中一个圆围绕圆周旋转。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from apng import APNG
from math import cos, pi, sin
from PIL import Image, ImageDraw
import IPython

def save(index, frames):
    filename = "file%02d.png" % index
    im = Image.new("RGB", (100, 100), (255, 255, 255))
    draw = ImageDraw.Draw(im)
    x = 30*cos(2*pi*index/frames) + 50
    y = 30*sin(2*pi*index/frames) + 50
    draw.ellipse((20,20,80,80),outline=(0,0,0))
    draw.ellipse((x-5, y-5, x+5, y+5), fill=(0, 0, 255))
    im.save(filename)
    return filename

返回文件名,因为它将在以后传递给APNG

传递给APNG以创建动画

APNG具有方法from_files,该方法会在食用文件列表时生成APNG,因此将其输入文件列表并使用save用适当的文件名保存。

使用IPython.display.Image可以原样显示保存的文件。

1
2
3
4
5
6
files = []
frames = 50
for i in range(frames):
    files.append(save(i, frames))
APNG.from_files(files, delay=100).save("animation.png")
IPython.display.Image("animation.png")

执行结果如下所示。

animation.gif

执行

单元格后,动画已成功显示在Google Colab上。

概要

介绍了如何在Google Colab上显示动画。在模拟数值计算或可视化可移动的东西时,我认为通过PIL喷出序列号png来制作APNG比使用Matplotlib进行尝试更容易。