网站首页 > 教程文章 正文
微信公众号里的动图
在前天推文“狗追鸭子[1]”留言中,有同学学问推文中的动图是如何制作的。
关于动图的制作方法,在公众号里大家输入 动图? 便可以查询到原来的说明。
推文中的动图是通过数据采集系统,包括可以读取数值的数字万用表、数字示波器、数字频谱仪以及特制的数据采集板卡等来采集。然后通过python语言绘制产生相应的动图。动图的风格包括以下两种:
(1)动态信号波形
仿照示波器显示波形的形式,将连续采集到的数据动态展示出来,反映了信号的变化特点。
动态信号波形图
(2)逐步增多数据曲线
将采集到的数据从少到多绘制成逐步压缩的曲线,可以展示数据发展的趋势规律。
动态数据曲线
绘制动图方法
以上两种方式主要是借助于两组命令分成两步形成GIF动图。
第一步 绘制曲线,存储图片
绘制曲线使用matplotlib中的plot命令完成。根据需要绘制的风格,可以选择按照一帧一帧地逐帧绘制,也可选择按照从少到多的绘制方式。
下面的代码片段显示了绘制一组频率变化的正弦曲线的图像,并将它们逐帧存储在指定目录中,文件名称从0.jpg,变化到49.jpg。这是制作动图的第一步。
import matplotlib.pyplot as pltomiga = linspace(1, 5, 50)t = linspace(0, 20, 200)count=0for o in omiga: sint = sin(t * o) plt.clf() plt.plot(t, sint, label='Sinusoidal Curve') plt.xlabel('Time (s)') plt.ylabel('Amplitude (V)') plt.grid(True) plt.savefig(r'd:\temp\%d.jgp'%count) count = count+1
根据matplotlib中的说明,存储图频的格式不包括BMP格式。可以生成JPG或者其他类型的图片。
生成频谱动态增加的曲线
第二步 生成动图文件
有了逐帧图片,现在有很多独立的程序,或者在线的网站可以提供转换成GIF片的功能。其中一个小巧但功能比较强的软件工具是:movgear.exe 软件。它不仅可以将一组单张图图频转换成GIF图片,也可以完成相应的编辑功能。
也存在很多python软件包可以帮助生成GIF图片,其中一个比较简便的就是是踹死PIL中的Image对象,在调用save()命令的时候生成GIF文件。在生成的同时可以指明每个图片显示的时间长度。
下面的代码片段显示了应用Image将输入的一组文件名称所对应的图频转换成GIF文件的过程。
下面是定义了一个PlotGIF类来帮助存储plt对象中的文件以及最后生成GIF图片。其中在初始化的时候指明一个临时的目录来存储PLOT存储的JPG文件。使用append()命令来添加每一次 plt 调用 savefig 所产生的文件。最后使用 save() 命令生成最终的 GIF 文件。
#------------------------------------------------------------# TSDRAW.PY#------------------------------------------------------------from tsmodule.tspdata import *from PIL import Image#------------------------------------------------------------class PlotGIF(object): def __init__(self, gifdir=r'd:\temp\GIF'): self.gifdir = gifdir self.imageDim = [] self.count = 0 if os.path.isdir(gifdir) == False: os.mkdir(gifdir) def infor(self, ): printf(self.gifdir, self.count) def __str__(self, ): return 'gifdir:%s'%self.dir def append(self, plt): filename = os.path.join(self.gifdir, '%04d.jpg'%self.count) self.count = self.count + 1 plt.savefig(filename) self.imageDim.append(Image.open(filename)) def save(self, giffile, period=100, last=100): duration = period[](self.imageDim "period") duration[-1] = last self.imageDim[0].save(giffile,\ save_all=True,\ append_images=self.imageDim[1:],\ duration=duration, loop=False) self.imageDim = [] self.count = 0 printf('Save GIF:%s'%giffile)
减少动图文件大小
如果是在微信公众号中使用GIF文件,它有两个限制,一个是文件的大小不超过5 MBytes。第二个限制是动图中包含的图片不超过300张。
如果文件的大小超过了5 M字节怎么办?
一方面可以在使用 plt 时,每张图片的大小尽量减小。另外一方面可以使用 movgear软件 对GIF文件进行差分存储。这种模式是将GIF图片中每相邻的两张图片相减,存储时将变化量按照游程无损编码方式完成压缩存储。如果动图相邻两张图片非常相似,这种差分之后的存储就非常有效果。对于不复杂的 plt的图片使用差分存储可以很轻松获得5倍以上的压缩效果。
movgear压缩GIF文件
猜你喜欢
- 2025-04-11 手把手教你开发智能备份神器,小白也能30分钟搞定!
- 2025-04-11 画像笔记23- 作业流程调度(2)(作业流程图怎么画)
- 2025-04-11 Python接口自动化之常见用例读取方法介绍
- 2025-04-11 AI办公自动化:批量合并多个Excel表格的数据并汇总
- 2025-04-11 pc端微信用户图片DAT格式解码为图片
- 2025-04-11 Python自动化脚本应用与示例(pythonui自动化脚本)
- 2025-04-11 21-02-Python-文件操作下(python文件操作方法)
- 2025-04-11 Python定时任务,三步实现自动化(python定时任务,三步实现自动化效果)
- 2025-04-11 自动下载邮箱里未阅读的发票,并用邮件标题里指定的几个字命名
- 2025-04-11 照片整理很繁琐?3个python脚本帮你快速整理照片
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)