相信很多学生党、上班族在日常的学习、科研、办公中总会有一些比较特殊的需求,本人作为一个理工科(非计算机相关专业)学生和大家一样。有时好不容易找到了比较心仪的工具,却发现还要收费,质量和使用的便捷性也不是完全符合心意。所以,我决定利用自己的空闲时间,对Python知识边学边用,活学活用,编写一些Python小工具,并和大家分享。 本人编程能力极其有限,若有错漏之处,希望各位大神不吝赐教!
【背景描述】
对计算机仿真结果进行后处理时,生成了一系列固定步长的云图(.jpg),希望将这些图片文件(400张)能够合并转化为动态图(.gif),以方便放到PPT中进行动态展示。
【编译环境】
Pycharm + Anaconda Python 3.9
【代码】
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每帧间隔,单位 秒s
:param loop:播放次数(在不同的播放器上有所区别),0代表循环播放
:param fps:帧率
: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"E:\summary").glob("*.jpg") #需要输入的一些列图片路径
p_list = [] #新建空列表,用于存储所有用于合并生成gif的图片路径
#enumerate()函数,用于将一个可遍历的数据对象(如:列表、元组、字符串)组合为一个索引序列,同时列出数据和数据下标
for n, p in enumerate(pathlist): #n是图片数据,p是对应n的文件名
p_list.append(p) #for循环,遍历所有图片,并一个一个将图片的路径存入p_lis
imgs2gif(p_list, "test.gif", 0.08, 0) #输入图片路径,输出文件名, 每张图片的持续时间(单位 秒s), 是否循环播放(0是,1否)