把多图片合成GIF动图的python实现方法,,这是一个关于把多图片合成
把多图片合成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)
编橙之家文章,
相关内容
- Python实现自动生成目录树的方法示例源码,python自动生
- python随机数应用示例,python随机数示例,随机数应用的
- NFA引擎,Python正则测试工具应用示例,nfapython,"""B
- python排序 key函数完成自定义排序的方法,pythonkey,学习
- Python文本操作之读取浮点数方法源码示例,,import refp
- python游戏源码实例之建房绿化时间表,python时间表,用
- 用Python怎样查看系统启动项的方法源码,python源码,查看
- Python os.path计算文件md5值源码,os.pathmd5,#-*- encodin
- Python实现求素数操作示例,python素数,python筛法求素数,
- 用python方法完成进度条的实现,python方法进度条,用py
评论关闭