当前位置 : 主页 > 编程语言 > python >

python做图片拼接

来源:互联网 收集:自由互联 发布时间:2022-06-15
python做图片拼接 ​​背景​​ ​​效果图​​ ​​完整代码​​ ​​代码解读​​ ​​注​​ 背景 手里头有如下4张独立的尺寸差不多的 微信 截图,现在要放在一起作比较,之前一



python做图片拼接

  • ​​背景​​
  • ​​效果图​​
  • ​​完整代码​​
  • ​​代码解读​​
  • ​​注​​

背景

手里头有如下4张独立的尺寸差不多的微信截图,现在要放在一起作比较,之前一直用美图秀秀拼图功能,这次向利用python的pillow模块来实现同样的效果。

python做图片拼接_python

效果图

python做图片拼接_pillow_02

完整代码

# -*- coding: utf-8 -*-
"""
project_name:图片拼接
@author: 帅帅de三叔
Created on Sun Sep 29 14:34:59 2019
"""
from os import listdir #返回指定的文件夹包含的文件或文件夹的名字的列表
from PIL import Image

def image_merge(): #定义拼接图片函数
image_list=[Image.open(file_name) for file_name in listdir() if file_name.endswith(".png")] #读取所有png格式图片组成一个图片列表
width=300 #统一的宽
height=120 #统一的高
image_resized=[image.resize((width,height),Image.BILINEAR) for image in image_list ]#重调图片尺寸
blank_board=Image.new(image_resized[0].mode,size=(width*len(image_resized)//2,height*len(image_resized)//2)) #新建空白画布
print(blank_board.size[0],blank_board.size[1]) #测试白板尺寸
boxs=[] #用来存放黏贴图片位置(四至)
for i in range(len(image_resized)//2):
for j in range(len(image_resized)//2):
box=(width*i,height*j,width*(i+1),height*(j+1)) #构造四至
boxs.append(box)
for index, bo in enumerate(boxs): #待黏贴的图片序号和位置
print(index,bo)
blank_board.paste(image_resized[index],bo) #在空白板上对应位置黏贴对应图片
blank_board.save("merged_picture.png") #保存黏贴结果

if __name__=="__main__":
image_merge()

代码解读

思路很自然,首先把四张图片用 Image.open() 函数读取进来构成一个列表,然后用 image.resize() 重新调整统一的尺寸,紧接着,新建一个大的画布blank_board,将画布划分为四块,因为这里只有四张微信截图,故可以构造成 2*2 的画布,其中boxs 用来存放黏贴图片位置(四至),构造四至的时候需要手动画一下,知道每一个box的位置。

python做图片拼接_微信_03

最后利用**blank_board.paste()**函数不断往白板上对应的box位置黏截图。

代码应该和读取的4张微信截图在一个文件夹下面,运行一次后会生产一个merged_picture.png 图片

python做图片拼接_图片合成_04

由于调用了listdir 模块,且一次性把文件夹下面所有png格式图片都读取进去组成一个图片列表,再次运行代码会读取5张图了,故只要运行一次就够了或者删除merged_picture.png 再运行。

python做图片拼接_pillow_05



上一篇:python for ArcGIS 绘制上海市板块地图
下一篇:没有了
网友评论