python做图片拼接

python做图片拼接

背景

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

效果图

在这里插入图片描述

完整代码

# -*- 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的位置。
在这里插入图片描述

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

代码应该和读取的4张微信截图在一个文件夹下面,运行一次后会生产一个merged_picture.png 图片
在这里插入图片描述
由于调用了listdir 模块,且一次性把文件夹下面所有png格式图片都读取进去组成一个图片列表,再次运行代码会读取5张图了,故只要运行一次就够了或者删除merged_picture.png 再运行。

发布了45 篇原创文章 · 获赞 12 · 访问量 8662

猜你喜欢

转载自blog.csdn.net/zengbowengood/article/details/101756411