Matplotlib 调用ImageMagick输出gif文件

前面使用animation.PillowWriter对象来实现输出GIF文件,达到可以让动画轻松地在网页上展示,因为很多网站只支持GIF动画上传,并不支持MP4。不过,不知道你有没有发现,使用animation.PillowWriter对象生成的GIF的身体可能有点肥胖,这样上传的速度变慢,或者下载的速度也变慢,这时候或许要减肥了,那么就需要使用专门的转换软件--ImageMagick。

使用ImageMagick的创建,编辑,撰写,或转换位图图像。它可以读取和写入各种格式(超过200种)的图像,包括PNG,JPEG,GIF,HEIC,TIFF,DPX,EXR,WebP,Postscript,PDF和SVG。使用ImageMagick可以调整图像大小,翻转,镜像,旋转,变形,剪切和变换图像,调整图像颜色,应用各种特殊效果或绘制文本,线条,多边形,椭圆和贝塞尔曲线。

ImageMagick是免费软件,可以即用型二进制分发形式提供,也可以作为源代码提供,您可以在开放应用程序和专有应用程序中使用,复制,修改和分发它们。它是在派生的Apache 2.0 许可下分发的。

ImageMagick利用多个计算线程来提高性能,并且可以读取,处理或写入兆,千兆或兆像素图像大小。

ImageMagick的官网有:

https://imagemagick.org/index.php

http://www.imagemagick.com.cn/

在这里主要在官网上下载Windows平台的版本,其它版本可以参考网站的说明下载,如下:

Matplotlib 调用ImageMagick输出gif文件

在本文里下载后得到的文件名称为:

ImageMagick-7.0.10-53-Q16-HDRI-x64-dll.exe

这是使用最新的版本,为7.0,支持WIN 64位操作系统。

然后双击这个文件就可以安装,我把它安装到目录:

Matplotlib 调用ImageMagick输出gif文件

到这里就可以把软件安装好了。接着下来,就是怎么样调用这个软件来转换成GIF文件,这个过程与前面文章里调用FFMPEG一样的,先写下面这行代码:

plt.rcParams['animation.convert_path'] = r'D:\ImageMagick\magick.exe'

这里就是设置了转换的文件路径,调用的程序是magick.exe,与旧的版本有区别,如果你是使用旧的matplotlib的例子,要注意这一点,否则找到旧的程序了。



接着下来,就是定义输出GIF文件的对象:

writer = animation.ImageMagickFileWriter(fps = 30)
anim.save('ani-057.gif', writer=writer)

第一行代码是调用animation.ImageMagickFileWriter()函数构造ImageMagick文件转换对象,它的定义如下:

class matplotlib.animation.ImageMagickWriter(fps=5, codec=None, bitrate=None, extra_args=None, metadata=None)

  • fps:表示帧速率, 默认值: 5

  • codec:表示使用编码器,可以是字符串或None, 默认: rcParams["animation.codec"] (default: 'h264')

  • bitrate:表示位速率,kb/s,速率越高视频质量越好,但体积越来越大, 默认值: rcParams["animation.bitrate"] (default: -1)

  • extra_args:表示命名行参数列表,可选。

  • metadata:表示GIF文件描述信息,字典对象描述Dict[str, str], default: {}

比如: title, artist, genre, subject, copyright, srcform, comment.

输出的结果如下:

Matplotlib 调用ImageMagick输出gif文件

其它代码与前面学习过的动画代码是一样的,就不再多解释了,整个例子的代码如下:

import numpy as np
from matplotlib import pyplot as plt
from matplotlib import animation 

plt.rcParams['animation.convert_path'] = r'D:\ImageMagick\magick.exe'

#
TWOPI = 2*np.pi
#
fig, ax = plt.subplots()

t = np.arange(0.0, TWOPI, 0.001)
s = np.sin(t)
l = plt.plot(t, s)

ax = plt.axis([0,TWOPI,-1,1])
#初始化
redDot, = plt.plot([0], [np.sin(0)], 'ro')

#动画回调函数
def animate(i):
    redDot.set_data(i, np.sin(i))
    return redDot,

# 使用animate函数
anim = animation.FuncAnimation(fig, animate, frames=np.arange(0.0, TWOPI, 0.1),
                               interval=10, blit=True, repeat=False)

# 
writer = animation.ImageMagickFileWriter(fps = 30)
anim.save('ani-057.gif', writer=writer)

plt.show()
赞(2)
未经允许不得转载:极客笔记 » Matplotlib 调用ImageMagick输出gif文件

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
Matplotlib 入门
Matplotlib 入门Matplotlib 安装之Linux操作系统Matplotlib 安装之Windows系统Matplotlib 安装之Mac OS X系统Matplotlib 安装之使用 Windows Installer安装程序Matplotlib 使用*.whl文件快速安装Matplotlib 绘图区域Matplotlib 设置绘图区域大小Matplotlib 网格线的颜色和刻度Matplotlib 坐标轴的标签和标题Matplotlib 指南Matplotlib pyplot指南
Matplotlib 几何图形
Matplotlib 画直线Matplotlib 图形失真Matplotlib 画圆弧示意图Matplotlib 用直线方式画圆Matplotlib 画椭圆示意图Matplotlib 画旋转向量示意图Matplotlib 使用patches绘制几何图形Matplotlib 使用模块patches的Wedge实现饼图Matplotlib 嵌套子图显示Matplotlib 两个子图显示
Matplotlib 颜色
Matplotlib 颜色Matplotlib 多边形颜色填充Matplotlib 不规则颜色填充Matplotlib 条件选择区域颜色填充
Matplotlib 坐标轴
Matplotlib 辅助指示坐标轴Matplotlib 公式显示Matplotlib 显示数学曲线Matplotlib 同一坐标里显示多条曲线Matplotlib 同一坐标里双Y轴显示Matplotlib 双Y轴显示时把图例显示到一起Matplotlib 三个Y轴显示Matplotlib 隐藏刻度方式显示三个Y轴Matplotlib 四个Y轴显示Matplotlib 一元线性回归显示Matplotlib X轴日期显示Matplotlib X轴年份采用四位显示Matplotlib X轴按小时显示Matplotlib X轴设置为弧度坐标Matplotlib X轴显示角度Matplotlib X轴显示特殊的标签Matplotlib 移动坐标轴位置Matplotlib 与数据区图像相对位置移动坐标轴位置
Matplotlib 函数
Matplotlib 函数plot 展现变量的趋势变化Matplotlib 函数plot 创建带文本标签的折线图Matplotlib 函数scatter 寻找变量之间的关系Matplotlib 函数xlim 设置x轴的数值显示范围Matplotlib 函数xlabel 设置x轴的标签文本Matplotlib 函数grid 绘制刻度线的网格线Matplotlib 函数axhline 绘制平行于x轴的水平参考线Matplotlib 函数axvspan 绘制垂直于x轴的参考区域Matplotlib 函数annotate 添加图形内容细节的指向型注释文本Matplotlib 函数text 添加图形内容细节的无指向型注释文本Matplotlib 函数title 添加图形内容的标题Matplotlib 函数legend 标示不同图形的文本标签图例Matplotlib 函数bar 用于绘制柱状图Matplotlib 函数barh 用于绘制条形图Matplotlib 函数hist 用于绘制直方图Matplotlib 函数pie 用于绘制饼图Matplotlib 函数polar 用于绘制极线图Matplotlib 函数scatter 用于绘制气泡图Matplotlib 函数stem 用于绘制棉棒图Matplotlib 函数boxplot 用于绘制箱线图Matplotlib 函数errorbar 用于绘制误差棒图Matplotlib 函数subplots和函数subplot区别
Matplotlib 动画和视频
Matplotlib ffmpeg安装Matplotlib 基本动画过程Matplotlib FuncAnimation方式创建动画Matplotlib ArtistAnimation方式创建动画Matplotlib 绘制一条螺旋曲线Matplotlib 输出gif文件Matplotlib 调用ImageMagick输出gif文件
Matplotlib 3D
Matplotlib 3D的坐标系Matplotlib 绘制3D图像
Matplotlib 导入导出
Matplotlib 保存绘图结果为PDF文件
Matplotlib 画线
Matplotlib 画线