python合成gif动图_把多图片合成GIF动图的python实现方法
这是一个关于把多图片合成GIF动图的python实现方法一文,完成这项操作的大体思路如下,源码供参考,如有不足能自行修改后再使用。
#type 合成GIF分类
#0:图片缩放到最大宽度*最大高度(长方形)、并粘贴到最大宽度*最大高度(长方形)的白色背景图片中、居中后合成
#1:图片缩放到最大长度(正方形)、并粘贴到最大长度(正方形)的白色背景图片中、居中后合成
#2:图片不缩放、并粘贴到最大宽度*最大高度(长方形)的白色背景图片中、居中后合成
#3:图片不缩放、并粘贴到最大长度(正方形)的白色背景图片中、居中后合成
#4:原图直接合成(按宽度排序、不缩放也不粘贴到新的白色背景图片中)
#5:原图直接合成(按高度排序、不缩放也不粘贴到新的白色背景图片中)
import os
from PIL import Image
import images2gif
def GetGifAnimationFromImages(targetGifFilePath, srcImageFilePaths, type = 0):
#用来合成的图片
images = []
#取得所有图片中最大长度(宽度、高度)
maxWidthAndHeight = 1
#最大宽度和高度
maxWidth = 1
maxHeight = 1
#取得图片按宽度从大到小排序的路径顺序
widthAndFilePaths = []
#取得图片按高度从大到小排序的路径顺序
heightAndFilePaths = []
for imageFilePath in srcImageFilePaths:
fp = open(imageFilePath, "rb")
width,height = Image.open(fp).size
widthAndFilePaths.append((width, imageFilePath))
heightAndFilePaths.append((height, imageFilePath))
maxWidth = max(maxWidth, width)
maxHeight = max(maxHeight, height)
fp.close()
maxWidthAndHeight = max(maxWidthAndHeight, maxWidth, maxHeight)
#降序排列
widthAndFilePaths.sort(key=lambda item: item[0], reverse=True)
heightAndFilePaths.sort(key=lambda item: item[0], reverse=True)
if type == 4 or type == 5:
#原图直接合成(按宽度排序)
if type == 4:
for widthAndFilePath in widthAndFilePaths:
img = Image.open(widthAndFilePath[1])
images.append(img)
#原图直接合成(按高度排序)
if type == 5:
for heightAndFilePath in heightAndFilePaths:
img = Image.open(heightAndFilePath[1])
images.append(img)
#www.iplaypy.com
else:
for imageFilePath in srcImageFilePaths:
fp = open(imageFilePath, "rb")
img = Image.open(fp)
width,height = img.size
#生成空的白色背景图片
if type == 0 or type == 2:
#长方形
imgResizeAndCenter = Image.new("RGB", [maxWidth,maxHeight], (255,255,255))
elif type == 1 or type == 3:
#正方形
imgResizeAndCenter = Image.new("RGB", [maxWidthAndHeight,maxWidthAndHeight], (255,255,255))
if type == 0:
#宽度/最大宽度>=高度/最大高度,使用小的缩放比例
if maxWidth / width >= maxHeight / height:
resizeImg = img.resize((width * maxHeight / height, maxHeight),Image.ANTIALIAS)
imgResizeAndCenter.paste(resizeImg, ((maxWidth - width * maxHeight / height)/ 2,0))
else:
resizeImg = img.resize((maxWidth, height * maxWidth / width),Image.ANTIALIAS)
imgResizeAndCenter.paste(resizeImg, (0,(maxHeight - height * maxWidth / width)/ 2))
if type == 1:
#宽度>=高度,按宽度缩放到最大长度
if width >= height:
resizeImg = img.resize((maxWidthAndHeight, height * maxWidthAndHeight / width),Image.ANTIALIAS)
imgResizeAndCenter.paste(resizeImg, (0,(maxWidthAndHeight - height * maxWidthAndHeight / width)/ 2))
else:
resizeImg = img.resize((width * maxWidthAndHeight / height, maxWidthAndHeight),Image.ANTIALIAS)
imgResizeAndCenter.paste(resizeImg, ((maxWidthAndHeight - width * maxWidthAndHeight / height)/ 2, 0))
elif type == 2:
imgResizeAndCenter.paste(img, ((maxWidth - width) / 2,(maxHeight - height) / 2))
elif type == 3:
imgResizeAndCenter.paste(img, ((maxWidthAndHeight - width) / 2,(maxWidthAndHeight - height) / 2))
# #保存缩放居中后的图片
# imgResizeAndCenter.convert("RGB").save(os.path.dirname(imageFilePath) + os.sep + "ResizeAndCenter" + os.path.basename(imageFilePath), 'jpeg')
images.append(imgResizeAndCenter)
fp.close()
images2gif.writeGif(targetGifFilePath, images, duration=1, nq=0.1)
#取得目录下面的文件列表
def GetDirImageList(dir_proc, recusive = True):
resultList = []
for file in os.listdir(dir_proc):
if os.path.isdir(os.path.join(dir_proc, file)):
if (recusive):
resultList.append(GetDirImageList(os.path.join(dir_proc, file), recusive))
continue
resultList.append(os.path.join(dir_proc, file))
return resultList
if __name__ == "__main__":
GetGifAnimationFromImages(r"D:\hecheng.gif", [r"D:\a.jpg", r"D:\b.jpg", r"D:\c.jpg"])
GetGifAnimationFromImages(r"D:\hecheng1.gif", [r"D:\a.jpg", r"D:\b.jpg", r"D:\b.jpg", r"D:\c.jpg"], 1)
GetGifAnimationFromImages(r"D:\hecheng2.gif", [r"D:\a.jpg", r"D:\b.jpg", r"D:\c.jpg"], 2)
GetGifAnimationFromImages(r"D:\hecheng3.gif", [r"D:\a.jpg", r"D:\b.jpg", r"D:\c.jpg"], 3)
GetGifAnimationFromImages(r"D:\hecheng4.gif", [r"D:\a.jpg", r"D:\b.jpg", r"D:\c.jpg"], 4)
GetGifAnimationFromImages(r"D:\hecheng5.gif", [r"D:\a.jpg", r"D:\b.jpg", r"D:\c.jpg"], 5)
GetGifAnimationFromImages(r"D:\hechengTest.gif", GetDirImageList(r"D:\GifMarker"), type = 4)
玩蛇网文章,转载请注明出处和文章网址:https://www.iplaypy.com/code/graphics/gr2551.html
相关文章 Recommend
python合成gif动图_把多图片合成GIF动图的python实现方法相关推荐
- php合并多张gif图,多张静态图片合成一张动态图-静图合成动图制作
现如今制作gif图片也不是什么难事了,巧用动态图合成软件,即能轻松将多张静态图片合成一张动态图.动态图片是由多张不同的静态图片组合而成的gif格式图片,它会按照一定的顺序和时间进行逐帧播放.做好的动态 ...
- 如何将一连串图片做成动图?怎么把图片做成gif动态图?
平时我们在浏览网页或者APP的时候,经常能看到上面有一些动态的图片,这些动态图片的格式一般都是gif,最简单的gif动图一般就是由几张静态图片合并而成的,这种图其实我们自己也是可以制作的,那么应该怎么 ...
- python图像合成代码_python使用pil库实现图片合成实例代码
本文研究的主要是python PIL实现图片合成的相关内容,具体介绍如下,分享实例代码. 在项目中需要将两张图片合在一起.遇到两种情况,一种就是两张非透明图片的合成, 一种是涉及到透明png的合成. ...
- python数据分析要学多久_如何七周成为数据分析师18:Python的新手教程
本文是<如何七周成为数据分析师>的第十八篇教程,如果想要了解写作初衷,可以先行阅读七周指南.温馨提示:如果您已经熟悉Python,大可不必再看这篇文章,或只挑选部分. Python是近年来 ...
- 学完python写不出程序_我又不当程序员,为什么要学Python编程?
记得刚毕业时,所受的第一场职场教育便是: 职场如战场,战场上只论功劳,不论苦劳. 回想起那时,无数个夜晚披星戴月加班加点,却常常被狠批在做无用功,迷茫与崩溃说来就来,甚至会觉得 " 越努力越 ...
- python回合制游戏教程_适合初学者练手的 10 个 有趣Python项目|python教程|python入门|python教程...
https://www.xin3721.com/eschool/pythonxin3721/ 想成为一个优秀的开发者,没有捷径可走,势必要花费大量时间在键盘后. 而不断地进行各种小项目开发,可以为之后 ...
- python新手入门项目推荐_适合初学者练手的 10 个 有趣Python项目
Python Python开发 Python语言 适合初学者练手的 10 个 有趣Python项目 想成为一个优秀的开发者,没有捷径可走,势必要花费大量时间在键盘后. 而不断地进行各种小项目开发,可以 ...
- python青少年编程题目二级_青少年编程能力等级测评试卷及答案 Python编程(二级)...
青少年编程能力等级测评试卷 Python编程(二级) (考试时间90分钟,满分100分) 一.单项选择题(共20题,每题2.5分,共50分)运行下方代码段,输出的结果是( D ). a=() prin ...
- python开发cad教程视频_我是编程小白,我想视频学习Python会不会能学会?
其实Python入门并不难,只要你有足够的自信心,明确学习目标,循序渐进就能不断享受到python带给你创新的乐趣. 之前我也是看了很多python入门视频教程,个人觉得有几个还是很不错的,大家可以学 ...
- hdc mfc 画扇形图_使用echarts绘制条形图和扇形图
使用echarts绘制条形图和扇形图 简单举例说明下echarts如何绘制条形图和扇形图 代码示例 echarts绘制条形图和扇形图 var mychart1=echarts.init(documen ...
最新文章
- C++ Opengl 绘制字体源码
- 打印多项式的那些坑(洛谷P1067题题解,Java语言描述)
- eclipse添加或者绑定约束文件
- 让世界没有陌生的角落共享单车时代的快与慢
- 深入理解Java String 池概念(String pool concept)
- gunicorn的用法
- html设置ie9兼容性视图,ie9兼容性视图设置方法
- 用户分层,该怎么分才合理(实操版)
- rm删除命令源码分析
- Leetcode-前缀和
- 比亚迪芯片BF7615BMxx芯片怎么烧录
- 【数学】Baby Step,Giant Step
- 双硬盘好还是纯固态好学计算机专业,固态硬盘虽好,但是和机械硬盘相比还是有其“不足之处”...
- 雷军:何以英雄背骂名!
- excel查找空值快捷键_CTRL+G,EXCEL中你必须要学会的快捷键
- 信用支付一路狂奔,未来这块蛋糕该怎么吃
- Codeforces 127C Hot Bath
- 10多个LearnDash示例和演示:从这些在线教育网站获得灵感!
- 网站抢购秒杀系统设计简析
- QT Debugging Helper Missing
热门文章
- 5财务分析的基本方法-盈利能力分析
- 计算机控制原理中雷达天线,相控阵雷达工作原理
- Excel 2016添加复选框
- Finance reading list(Mar.2019,by Stephen Nie)
- Spark SQL的自定义函数UDF
- 百度市值要被京东超越了?你投百度还是京东?
- 我们为什么不画高保真原型图
- 工具篇之Chrome浏览器所有页面崩溃(包括设置页面)的处理方法
- C++ 动态申请二维数组与二维数组传参
- GridLayout 介绍 (转载自http://www.cnblogs.com/skywang12345/p/3154150.html)