使用python生成 gif 格式的动图
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入import
·
用python生成 gif 动图的方法
工作中涉及到把一系列图片生成 fig,查询了一些方法,主要有两种,下面一一介绍
下图是我从原视频拆出来的图片
宽度: 544,
高度: 960,
视频帧率: 30
由于图片较多,我们只用了 1/4 的图片,要不生成的 gif 动图就太大了
一、用 imageio 库生成动态图片
没安装的可以 pip install imageio
安装一下
代码如下
import imageio
from pathlib import Path
def imgs2gif(imgPaths, saveName, duration=None, loop=0, fps=None):
"""
生成动态图片 格式为 gif
:param imgPaths: 一系列图片路径
:param saveName: 保存gif的名字
:param duration: gif每帧间隔, 单位 秒
:param fps: 帧率
:param loop: 播放次数(在不同的播放器上有所区别), 0代表循环播放
:return:
"""
if fps:
duration = 1 / fps
images = [imageio.imread(str(img_path)) for img_path in imgPaths]
imageio.mimsave(saveName, images, "gif", duration=duration, loop=loop)
pathlist = Path(r"G:\img").glob("*.jpg")
p_lis = []
for n, p in enumerate(pathlist):
if n % 5 == 0:
p_lis.append(p)
imgs2gif(p_lis, "dance_0.gif", 0.033 * 5, 0)
imgs2gif(p_lis, "dance_1.gif", 0.033 * 5, 1)
下面分别是循环播放和只播放一次 gif 图片
二、用 PIL 库生成动态图片
代码如下:
from pathlib import Path
from PIL import Image
def imgs2gif(imgPaths, saveName, duration=None, loop=0, fps=None):
"""
生成动态图片 格式为 gif
:param imgPaths: 一系列图片路径
:param saveName: 保存gif的名字
:param duration: gif每帧间隔, 单位 秒
:param fps: 帧率
:param loop: 播放次数(在不同的播放器上有所区别), 0代表循环播放
:return:
"""
if fps:
duration = 1 / fps
duration *= 1000
imgs = [Image.open(str(path)) for path in imgPaths]
imgs[0].save(saveName, save_all=True, append_images=imgs, duration=duration, loop=loop)
pathlist = Path(r"G:\img").glob("*.jpg")
p_lis = []
for n, p in enumerate(pathlist):
if n % 5 == 0:
p_lis.append(p)
imgs2gif(p_lis, "dance_2.gif", 0.033 * 5, 1)
总结
使用 imageio
库生成的gif图片清晰度高,而且小
同样是上面的图片, 用 PIL
库生成动图 7.28M 而且动图上噪点较多
用 imageio
生成的动图清晰, 只有4.59M
说明: 以上图片来自网络上的视频,如有侵权,联系删除
更多推荐
所有评论(0)