用Python pillow 创建和保存GIF动画

使用pillow库来创建和保存gif

GIFs:图形交换格式(gif)是一种位图图像格式,由美国计算机科学家Steve Wilhite于1987年6月15日领导的在线服务提供商CompuServe的一个团队开发。

一个GIF文件通常存储一个图像,但该格式允许在一个文件中存储多个图像。该格式还有一些参数,可用于对图像进行排序,在短时间内显示每张图像,然后用下一张图像取代它。简单地说,GIF是一种移动图像。

Pillow: Pillow用于在python中进行图像处理。Pillow是在PIL(python图像库)的基础上开发的。PIL在Python 3中不被支持,所以我们使用了一个Pillow。

这个模块没有预装在Python中。所以要安装它,在命令行中执行以下命令。

pip install pillow

让我们创建一个gif的步骤:

第1步:首先我们导入我们对PIL模块的要求。

from PIL import Image, ImageDraw

第2步:在我们输入圆圈的数值后创建一个列表。(0,255,0)它是绿色的颜色代码,(255,0,0)是红色的颜色代码。

images = []
width = 200
center = width // 2
color_1 = (0,255, 0)
color_2 = (255, 0, 0)
max_radius = int(center * 1.5)
step = 8

第3步:用For循环来创建一个动画图像。第2行代码用来设置正方形的值,该正方形包含红色,其边缘大小为200。

for i in range(0, max_radius, step):im = Image.new('RGB', (width, width), color_2)draw = ImageDraw.Draw(im)draw.ellipse((center - i, center - i,center + i, center + i), fill=color_1)images.append(im)

第4步:保存gif图像。

images[0].save('pillow_imagedraw.gif',save_all = True, append_images = images[1:],optimize = False, duration = 10)

以下是完整的实现方案:

from PIL import Image, ImageDrawimages = []width = 200
center = width // 2
color_1 = (0,255, 0)
color_2 = (255, 0, 0)
max_radius = int(center * 1.5)
step = 8for i in range(0, max_radius, step):im = Image.new('RGB', (width, width), color_2)draw = ImageDraw.Draw(im)draw.ellipse((center - i, center - i,center + i, center + i),fill = color_1)images.append(im)images[0].save('pillow_imagedraw.gif',save_all = True, append_images = images[1:], optimize = False, duration = 10)

输出:

用Python创建和保存GIF动画 - pillow

                                               本次分享到此结束,感谢大家的阅读! 

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

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

相关文章

为什么要学习这么多“没用”的知识

最近也在看一些东西,很多很杂,底层的知识,高级的架构,正确且废话的方法论。。。越看越迷茫。和同学聊天,也在自嘲现在看的这些八股文,源代码,除了面试那几天用一下,可能一辈子都不会…

【Java05】Java中的多维数组

从数组底层运行机制上看,Java没有多维数组一说。所谓多维数组,是说一个引用变量指向的元素也是引用变量。 例如,type[] arrayName是个指向type类型元素的数组。倘若type也是数组引用变量,比如int[],那么这个数组就可以…

中国银行信息科技运营中心、软件中心春招笔试测评面试体检全记录

本文介绍2024届春招中,中国银行下属各部门统一笔试,以及信息科技运营中心与软件中心各自的面试,以及编程能力测评、体检等相关环节的具体流程、相关信息等。 2024年04月投递了中国银行的信息科技类岗位,一共投递了4个岗位&#xf…

数字孪生定义及应用介绍

数字孪生定义及应用介绍 1 数字孪生(Digital Twin, DT)概述1.1 定义1.2 功能1.3 使用场景1.4 数字孪生三步走1.4.1 数字模型1.4.2 数字影子1.4.3 数字孪生 数字孪生地球平台Earth-2 参考 1 数字孪生(Digital Twin, DT)概述 数字孪…

QT TCP服务器和客户端示例程序

下面是一个简单的 Qt TCP 服务器和客户端示例&#xff0c;演示了如何使用 vSetDriver、vSetListener 和 vTcpServerStart 函数。假设 vSetDriver 和 vSetListener 是你定义的自定义函数。 TCP 服务器部分 tcpserver.h #ifndef TCPSERVER_H #define TCPSERVER_H#include <QT…

前端-高德地图去掉左下角Logo和版本号

前端-高德地图去掉左下角Logo和版本号 以react less 为例&#xff1a; .mapContainer{:global{.amap-logo {display: none !important; //去掉高德地图logo}.amap-copyright {opacity: 0; //去掉高德的版本号}} }

基于自编码器的心电信号异常检测(Pytorch)

代码较为简单&#xff0c;很容易读懂。 # Importing necessary libraries for TensorFlow, pandas, numpy, and matplotlib import tensorflow as tf import pandas as pd import numpy as np import matplotlib.pyplot as plt import copy# Importing the PyTorch library im…

内网穿透的原理:实现远程访问的技术揭秘

内网穿透的原理&#xff1a;实现远程访问的技术揭秘 引言 内网穿透是一种允许外部网络访问内网服务的技术。这对于远程办公、访问家庭服务器或进行开发测试非常有用。本文将探讨内网穿透的工作原理及其实现方式。 基础知识 内网&#xff08;LAN&#xff09;&#xff1a;局域…

ml307A模块连接阿里云(详细版)

1、需要的信息 MQTT连接参数、订阅或发布的主题、服务器地址、端口1883 服务器地址&#xff1a; alFMz7jnArW.iot-as-mqtt.cn-shanghai.aliyuncs.com 注&#xff1a;重要的信息阿里云信息大家不要透露&#xff0c;写完笔记会及时删除产品及设备&#xff0c;大家用自己的信息…

linux精通 4.1

2.1.3 http服务器实现 目的 reactor应用——webserver webclient 每次上课前 看大纲down code 复习&#xff1a; 不行啊 编译给的代码报错啊 给的最新的不是0430那一版就不行啊 reactor.c:(.text0x254): relocation truncated to fit: R_X86_64_PC32 against symbol begin de…

python 光伏相关packages

除了PVLIB之外&#xff0c;还有一些其他光伏&#xff08;太阳能光伏&#xff09;相关的Python包和工具。这些包提供了各种功能&#xff0c;从光伏系统建模和仿真到数据处理和可视化。以下是一些常见的光伏相关Python包&#xff1a; SolarPy: SolarPy 是一个专注于太阳能数据分析…

待学习记录清单

1、大模型相关的知识和周边知识&#xff0c;相关的论文阅读&#xff1b; 论文0&#xff1a;https://arxiv.org/abs/1706.03762 论文1&#xff1a;https://arxiv.org/pdf/2306.07962 论文2&#xff1a;https://arxiv.org/abs/2405.20323 2代码链接&#xff1a;https://github.co…

《QT实用小工具·七十一》基于Qt+Qml开发的文件传输工具

1、概述 源码放在文章末尾 该项目基于QTQML实现了文件传输的功能&#xff0c;可以在局域网环境下使用(热点)&#xff0c;扫描使用UDP&#xff0c;传输使用TCP&#xff0c;每一个文件传输使用独立的线程进行处理&#xff0c;高效便捷。 开发环境 使用Qt/Qml开发 QT版本&#x…

(自用)关于程序的一些概念3:程序中的“选择“

前言 学习的基本过程有理解→总结→应用这几个步骤.总结的目的大概是概括出大体的一种思路,一些必然和必不然,整理出"概念",并以概念指导应用 引入 尝试做一些和编程有关的概念总结.为了满足那个很朴素的想法:总结出概念,编程的思路就水到渠成地来了.---就好像学了单…

Android --- 异步操作

同步和异步的差异 同步&#xff1a;在发生某件事后什么也不做&#xff0c;直到该事件完成后&#xff0c;再继续进行 异步&#xff1a;在某件事发生后&#xff0c;可以在等待他完成的时候去处理其他事件&#xff0c;等到该事件发生完成后&#xff0c;再回过头来处理它。 异步…

C#心跳机制服务器

控制台应用项目 Program.cs internal class Program {static Server server;static void Main(string[] args){Server server new Server(IPAddress.Any,3333);server.Start();// 除了服务器监听方法&#xff0c;监听客户连接的方法&#xff0c;扫描客户端是否在线的方法//如…

Linux服务器上激活conda环境conda: error: argument COMMAND: invalid choice: ‘activate‘

正常我们使用如下来流程&#xff1a; 创建环境&#xff1a;conda create -n 环境名称 激活环境&#xff1a;conda activate 环境名称 但是&#xff0c;在Linux服务器上&#xff0c;使用conda activate 环境名称&#xff0c;出现如上图所示的报错。conda: error: argument CO…

2.1 嵌入式八股文(三)

一、C中类成员的访问权限&#xff1f; C通过public、protected、private 三个关键字来控制成员变量和成员函数的访问权限&#xff0c;它们分别表示公有的、受保护的、私有的&#xff0c;被称为成员访问限定符。在类的内部&#xff08;定义类的代码内部&#xff09;&#xff0c…

Excel 常用技巧(六)

Microsoft Excel 是微软为 Windows、macOS、Android 和 iOS 开发的电子表格软件&#xff0c;可以用来制作电子表格、完成许多复杂的数据运算&#xff0c;进行数据的分析和预测&#xff0c;并且具有强大的制作图表的功能。由于 Excel 具有十分友好的人机界面和强大的计算功能&am…

CMSIS-RTOS2简介

本文介绍CMSIS-RTOS2。 1.引入 CMSIS-RTOS2在基于Arm Cortex处理器的设备上运行的实时操作系统内核上指定了通用RTOS接口。应用程序和中间件组件可以使用CMSIS-RTOS2 API在各种软件生态系统中实现更好的代码重用和更简单的集成。 CMSIS-RTOS2还指定了RTOS内核使用的标准OS T…