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

news/2024/12/23 0:02:34/
  • 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.ppmy.cn/news/1226564.html

相关文章

curl网络请求命令

curl简介 1、什么是curl2、curl命令的基本使用 1、什么是curl CURL(CommandLine Uniform Resource Locator)是一个利用URL语法,在命令行终端下使用的网络请求工具,支持HTTP、HTTPS、FTP等协议 Linux、MAC系统一般默认已安装好CUR…

Linux通过端口号找到对应的服务及其安装位置

Linux服务器中,通过端口号找到对应的服务及其安装位置,需要两步操作,如下: 第一步:根据端口号,确定对应的进程号(以redis服务为例) netstat -antup|grep 6379第二步:通…

MyBatis #{} 和 ${} 的区别

前言: #{} 和 ${} 的区别是 MyBatis 中一个常见的面试题,#{} 和 ${} 是MyBatis 中获取参数的两种方式,但我们在项目中大多数使用的都是 #{} 来获取参数,那么它们两个有什么区别呢? 区别 一. #{} 采用预编译 SQL&…

MatLab的下载、安装与使用(亲测有效)

1、概述 MatLab是由MathWorks公司开发并发布的,支持线性代数、矩阵运算、绘制函数和数据、信号处理、图像处理以及视频处理等功能。广泛用于算法开发、数据可视化、数据分析以及数值计算等。 Matlab 的主要特性包括: 简单易用的语法,使得程…

Linux 之 journalctl 查看系统与 kernel 日志

目录 1. Linux 之 journalctl 查看系统与 kernel 日志 1. Linux 之 journalctl 查看系统与 kernel 日志 1 概述 日志管理工具 journalctl 是 centos7 上专有的日志管理工具, 该工具是从 message 这个文件里读取信息。Systemd 统一管理所有 Unit 的启动日志。带来的好处就是, …

Axure基础详解二十二:随机点名效果

效果演示 组件 建立一个【中继器】,内部插入一个“文本框”。【中继器】每页项目数为1,开始页为1。 设置交互 页面载入时交互 给【中继器】新曾行,“name”数据列添加10行数据,填入相应的名字;“shunxu”数据列全部…

功能具象化复盘

前言 项目前期,工作中常遇到整个功能进行迭代,工作量会较大。接下来以一个工作中一个模块整体为例,分享笔者的设计思路,如果有不同想法和意见的随时可以交流。 业务场景 再说测试中按照形式分为:手动和自动。自动需…

Redis怎么保证数据不丢失

目录 一、Redis使用持久化保证数据不丢失 二、Redis 持久化的三种方式 三、混合持久化的流程 一、Redis使用持久化保证数据不丢失 Redis 中的数据是存放在内存中的,这样可以保证 Redis 高效的运行,然而内存中的数据会随着系统的重启而丢失,那…