python生成摸头GIF

本篇教程演示了如何使用python的PIL库生成GIF图片

源码已经贴在文中,自行取用

效果演示

运行代码,会让你选择要制作的图片

运行完成后,会在同路径下生成dem.gif

原理

  1. 本源码主要用到PIL库的Image模块
  2. 使用Image模块的相关方法处理每一帧的图片
  3. 存储到GIF列表并生成GIF
  4. 需要先调试好参数

源码

完整代码及素材打包在附件中了,文末下载

环境:python3.7

'''
不需要图形界面的
记得自己删除tk模块相关
并添加图像接收入口 rua("图像路径").add_gif()
''' from tkinter import filedialog
from PIL import Image,ImageDraw
import os,tkinter class rua():
def __init__(self,img_file):
# 载入图片
self.author = Image.open(img_file) def add_png(self,png_d):
# 根据参数重置图片大小
author = self.author.resize((png_d[0],png_d[1] - png_d[2])) # 载入素材
rua_p1 = Image.open(png_d[3]) # 创建背景模板
rua_png1 = Image.new('RGBA',(110,110),(255,255,255,255)) # 使用预定义的参数:jd,合成一帧的样例
rua_png1.paste(author,(110 - png_d[0],110 - png_d[1] + png_d[2]),author)
rua_png1.paste(rua_p1,(0,110 - png_d[1] - png_d[2]),rua_p1)
return rua_png1 def add_gif(self):
# 获取绝对路径
png_dir = os.getcwd() + '\\data\\' # 获取素材列表
pst = os.listdir(png_dir)
for i in range(len(pst)):
pst[i] = png_dir + pst[i] # 预调试好的参数,传入素材列表
jd = [[90,90,5,pst[0]],
[90,87,5,pst[2]],
[90,84,10,pst[3]],
[90,81,8,pst[4]],
[90,78,5,pst[5]],
[90,75,5,pst[6]],
[90,72,8,pst[7]],
[90,74,8,pst[8]],
[90,77,9,pst[9]],
[90,80,8,pst[1]]] # 重置要生成的图片大小
self.author = self.author.resize((90,90)) # 绘制模板
alpha_layer = Image.new('L', (90, 90), 0)
draw = ImageDraw.Draw(alpha_layer)
draw.ellipse((0,0,90,90), fill=255)
self.author.putalpha(alpha_layer) # gif列表
gifs = []
for i in range(len(jd)):
# 将参数传递给生成方法
# 添加到gif列表
gifs.append(self.add_png(jd[i])) # 文件名,是否保存所有,图片列表,fps/ms
gifs[0].save("dem.gif","GIF",save_all=True,append_images=gifs, duration=35,loop=0)
self.author.close() # 写上这个方法,否则在选择文件时,会弹出一个tk的默认界面
# 可以将下面两行注释掉看看效果
root = tkinter.Tk()
root.withdraw() # 选择要生成的文件
# 可以替换为指定路径
file_path = filedialog.askopenfilename()
au = rua(file_path).add_gif()

本功能已集成到<一铭API>中

源站地址:https://api.wer.plus

接口开发采用:Python + Flask

下载完整代码

点击下载

Python生成GIF动态图的更多相关文章

  1. 如何录制视频生成GIF动态图?

    前言 在分享文章时有些知识不好讲清,就打算用gif图来展示,可是在网上找了几个录视频的工具都要会员才可以生成gif动态图,很是郁闷,不过苦苦寻找后,发现LICEcap很好用,可以很方便的生成gif动态 ...

  2. JS生成gif动态图下载

    需求:通过动态变化的图生成一个gif图提供下载. 实现方案:1.可通过服务端生成对应gif,然后前端请求下载2.前端自己实现生成gif图片,自行下载 采用方案:前端实现方式,于是在网上找各种相关的几款 ...

  3. 音视频入门-20-BMP、PNG、JPG、GIF静态图生成GIF动态图

    * 音视频入门文章目录 * 静态图 -> 动态图 前面 [18-手动生成一张GIF图片] 和 [19-使用giflib处理GIF图片] 生成的 GIF 每一帧都是一个颜色,平时用到的 GIF 每 ...

  4. python生成组织架构图(网络拓扑图、graph.editor拓扑图编辑器)

    Graph.Editor是一款基于HTML5技术的拓补图编辑器,采用jquery插件的形式,是Qunee图形组件的扩展项目,旨在提供可供扩展的拓扑图编辑工具, 拓扑图展示.编辑.导出.保存等功能,此外 ...

  5. 利用Python生成GIF动图

    一.PIL库 1.PIL库的概括: PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库 ...

  6. Python排序算法动态图形化演示(实现代码)

     1.冒泡排序 冒泡排序是最简单也是最容易理解的排序方法,其原理就是重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是 ...

  7. Latex中也能展示动态图?

    技术背景 在学术领域,很多文档是用Latex做的,甚至有很多人用Latex Beamer来做PPT演示文稿.虽然在易用性和美观等角度来说,Latex Beamer很大程度上不如PowerPoint,但 ...

  8. 【Python】模块学习之matplotlib柱状图、饼状图、动态图及解决中文显示问题

    前言 众所周知,通过数据绘图,我们可以将枯燥的数字转换成容易被人们接受的图表,从而让人留下更加深刻的印象.而大多数编程语言都有自己的绘图工具,matplotlib就是基于Python的绘图工具包,使用 ...

  9. 你只要5行代码,拥有你的个性二维码,用Python生成动态二维码

    如果想了解更多关于python的应用,可以私信我,或者点击下方链接自行获取,里面到资料都是免费的(http://t.cn/A6Zvjdun) 二维码满天飞,但是有没有想过Python也能制作出专属于自 ...

随机推荐

  1. Spring通知有哪些类型?

    (1)前置通知(Before advice):在某连接点(join point)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常). (2)返回后通知(After returnin ...

  2. js技术之拖动table标签

    一.js技术之拖动table标签 起因:前几天公司,突然安排一个任务 任务描述:要求尺码table列表要像Excel表中一样可以直接移动整行尺码到任意行位置 技术点:采用ui的sortable技术来h ...

  3. String工具类之“前缀比较”StringUtils.startsWith和StringUtils.startsWithIgnoreCase

    (1)字符串以prefix为前缀(区分大小写) StringUtils.startsWith(被比较的字符串,比较字符串) 总结: 根据下面代码发现,上面的例子有部分时错误的,有可能是因为思维原因,他 ...

  4. 【STM32】MDK中寄存器地址名称映射分析

    对于MCU,一切底层配置,最终都是在配置寄存器 51单片机访问地址 51单片机经常会引用一个reg51.h的头文件.下面看看它是怎么把名字和寄存器联系在一起的: 1 sfr p0=0x80; 2 p0 ...

  5. 前端系列——React开发必不可少的eslint配置

    项目需要安装的插件 "babel-eslint": "^8.0.3", "eslint": "^4.13.1", &qu ...

  6. 讲清楚之 javascript 参数传值

    讲清楚之 javascript 参数传值 参数传值是指函数调用时,给函数传递配置或运行参数的行为,包括通过call.apply 进行传值. 在实际开发中,我们总结javascript参数传值分为基本数 ...

  7. vue中对element-ui框架中el-table的列的每一项数据进行操作

    vue中使用element table,表格参数格式化formatter 后台返回对应的数字, 那肯定不能直接显示数字,这时候就要对 表格进行数据操作 如图: 代码: methods: { //状态改 ...

  8. Python入门-多进程

    1.获取本机CPU # 早期的CPU是单核:实现多个程序并行,在某一时间点,其实只有一个进程 # 后来硬件多核CPU:多个进程是并行执行. from multiprocessing import cp ...

  9. 服务器的cpu 核心、线程

    此版本有大范围改动,因为cpu作为一个大脑,所以更细致的进行了,相关的分析和阐述. 1.版本1. 2022.1.242.版本2: 2022.3.2 采集数据: ht2机器为物理机,cpu是4颗cpu, ...

  10. MySQL 社区版

    MySQL 社区版 MySQL 社区版是全球广受欢迎的开源数据库的免费下载版本.它遵循 GPL 许可协议,由庞大.活跃的开源开发人员社区提供支持. MySQL 社区版包括: 可插拔的存储引擎架构 多种 ...