Python 利用PIL由多张图片合成gif动画

  • Python 由多张图片合成gif动画


  • 案例
import os
figure_save_path = "file_fig_test"
import warnings
warnings.filterwarnings("error")
import numpy as np
np.random.seed(0)
import matplotlib.pyplot as plt
from PIL import Image
import timenum = 100
gif_frames = []
open_time = []
save_time = []
plot_time = []for i in range(num):#图形绘制start_time = time.time()plt.scatter(np.random.random(), np.random.random())end_time = time.time()plot_time.append(end_time-start_time)#创建图形保存文件夹if not os.path.exists(figure_save_path):os.makedirs(figure_save_path)else:pass#保存图形start_time = time.time()plt.savefig(os.path.join(figure_save_path, str(i) + ".jpg"))end_time = time.time()save_time.append(end_time-start_time)#打开图形start_time = time.time()img = Image.open(os.path.join(figure_save_path, str(i) + ".jpg"))end_time = time.time()open_time.append(end_time-start_time)gif_frames.append(img)print("动画绘制开始")
start_time = time.time()
gif_frames[0].save("test.gif",save_all=True, append_images=gif_frames[1:], duration=200, loop=0)
end_time = time.time()
print("动画绘制完成,用时:", round(end_time-start_time, 6))
print("平均动画绘制完成,用时:", round((end_time-start_time)/num, 6))print("平均图形绘制用时:", round(sum(plot_time)/len(plot_time), 6))
print("平均图形保存用时:", round(sum(save_time)/len(save_time), 6))
print("平均图形打开用时:", round(sum(open_time)/len(open_time), 6))
  • 动画生成结果就不放了

  • 让我们看看什么操作最耗时
动画绘制开始
动画绘制完成,用时: 3.61503
平均动画绘制完成,用时: 0.03615
平均图形绘制用时: 0.004437
平均图形保存用时: 0.146415
平均图形打开用时: 0.000287

  • 这是保存图形用时随图像数量的变化 
    • 考虑到绘制点数的增长,这是合理的


  •  这是图形打开用时
    • 变换不大,这是合理的


  • 这是每次scatter的用时
    • 看上去也比较合理


  • 那我们再看看随着图片数量的增长,绘制动画的用时变化
gif_time = []
for i in range(20, 100):new_frames = gif_frames[:i]start_time = time.time()new_frames[0].save(str(i)+".gif",save_all=True, append_images=gif_frames[1:], duration=200, loop=0)end_time = time.time()gif_time.append(end_time-start_time)print("finished:", str(i))

  • 这就比较迷
    • 不过问题不大

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/191467.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLO目标检测——烟雾检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用:烟雾检测数据集可用于监控烟雾情况,实现火灾的早期预警。数据集说明:烟雾检测数据集,真实场景的高质量图片数据,数据场景丰富,含烟雾1个类别标签说明:使用lableimg标注软件标注&am…

c语言:模拟实现qsort函数

qsort函数的功能: qsort相较于冒泡排序法,不仅效率更快,而且能够比较不同类型的元素,如:浮点数,结构体等等。这里我们来模拟下qsort是如何实现这一功能的,方便我们对指针数组有一个更深层次的理…

mmdet 3.x 打印各类指标

和mmdet2.x中的修改地方不一样,在mmdet/evaluation/metrics/coco_metric.py中第72行将classwise设为True就可以打印各类指标了 但是在test的时候一直都是什么指标都不打印,不管是上面总的指标还是下面的各类指标,暂时不知道怎么处理 找到原因…

“贾维斯”落地国内头部手机厂商? 这个AI助手真顶顶顶顶顶!

一个新的“贾维斯”即将落地国内头部手机厂商? 大家好,我是卖萌酱。 就在近日,2023 OPPO开发者大会正式官宣发布自主训练的大模型AndesGPT全新小布智能助手,算是正式预告国内头部一线手机厂商已经几乎全部完成大模型终端的布局。…

Egress Gateway

目录 文章目录 目录本节实战Egress Gateway访问外部服务1.Envoy 转发流量到外部服务2.控制对外部服务的访问3.直接访问外部服务总结 Egress 出口网关1.用 Egress gateway 发起 HTTP 请求2.用 Egress gateway 发起 HTTPS 请求 关于我最后 本节实战 实战名称🚩 实战&…

经典ctf ping题目详解 青少年CTF-WEB-PingMe02

题目环境: 根据题目名称可知 这是一道CTF-WEB方向常考的知识点:ping地址 随便ping一个地址查看接受的数据包?ip0.0.0.0 有回显数据,尝试列出目录文件 堆叠命令使用’;作为命令之间的连接符,当上一个命令完成后,继续执…

Buildroot 添加 Qt 支持

Buildroot 添加 Qt 支持 lqonlylove 于 2022-12-03 13:37:34 发布 阅读量2.8k 收藏 12 点赞数3 分类专栏: 根文件系统制作 文章标签: qt buildroot 版权 ​编辑根文件系统制作专栏收录该内容 2 篇文章0 订阅 订阅专栏 一、制作根文件系统 Buildroot 制作根文件系统_l…

​软考-高级-系统架构设计师教程(清华第2版)【第18章 安全架构设计理论与实践(P648~690)-思维导图】​

软考-高级-系统架构设计师教程(清华第2版)【第18章 安全架构设计理论与实践(P648~690)-思维导图】 课本里章节里所有蓝色字体的思维导图

深入了解Java 8 新特性:lambda表达式基础

阅读建议 嗨,伙计!刷到这篇文章咱们就是有缘人,在阅读这篇文章前我有一些建议: 本篇文章大概000多字,预计阅读时间长需要5分钟。本篇文章的实战性、理论性较强,是一篇质量分数较高的技术干货文章&#xf…

MATLAB画图分辨率、图像大小研究

MATLAB画图分辨率、图像大小研究 Figure属性中 InnerPosition Position OuterPosition区别画图与打印的分辨率和图像大小研究首先明确两个概念:MATLAB实操画图 Figure属性中 InnerPosition Position OuterPosition区别 在画图的时候,我们经常需要设置Fi…

迪杰斯特拉算法(C++)

目录 介绍: 代码: 结果: 介绍: 迪杰斯特拉算法(Dijkstras algorithm)是一种用于计算加权图的单点最短路径的算法。它是由荷兰计算机科学家Edsger W. Dijkstra在1956年发明的。 该算法的思路是&#xf…