python之PIL 小图拼接成大图

前言

上一篇文章,我们把一张超大图给拆分成了n行m列的小图。后来我们 又有一个新需求,就是把图片给卡通风格化,顺便在把图片处理清晰一些,于是我就使用了https://github.com/AaronFeng753/Waifu2x-Extension-GUI工具,把图片直接高清化,卡通画处理了一下,但是因为我们大图太大,没法直接处理,于是我们就处理了小图,然后再合并成大图供美术再二次修改。所以就需要我再使用PIL把小图合并成大图。
于是有了下面的代码,好了直接上代码:

import PIL.Image as Image
import os

# 图片文件夹路径
root_path = "C:/Users/jzq/Desktop/Test/"
out_path = "C:/Users/jzq/Desktop/Test/"
# 后缀
ext_name = '.png'
# 图片名集合
forders = [
    # 原图文件名         切割行数    切割列数
    {
    
    "name": "11002", "row": 12, "column": 16},
]

# 定义图像拼接函数
def image_compose(forder):
    # 获取图片集地址下的所有图片名称
    image_names = []
    row = forder["row"]
    column = forder["column"]
    fileName = forder["name"]
    # 小图尺寸
    image_size = 512

    if not os.path.exists(IMAGE_SAVE_PATH):
        os.makedirs(IMAGE_SAVE_PATH)

    # 根据行列,拼接小图路径
    for num in range(0, row * column):
        image_path = fileName + "_" + str(num) + IMAGES_EXT
        image_names.append(image_path)

    # 简单的对于参数的设定和实际图片集的大小进行数量判断
    if len(image_names) != row * column:
        raise ValueError("合成图片的参数和要求的数量不能匹配!")

    # 创建一个新图
    to_image = Image.new('RGBA', (column * image_size, row * image_size))  
    # 循环遍历,把每张图片按顺序粘贴到对应位置上
    for i in range(0, len(image_names)):
        img = image_names[i]
        from_image = Image.open(IMAGES_PATH + fileName + "/" + img)
        x = int(i % column) + 1
        y = row - int(i / column)
        print(img + "=> " + str(y) + '_' + str(x) + IMAGES_EXT)
        to_image.paste(from_image, ((x - 1) * image_size, (y - 1) * image_size))

    # 拼接输出大图路径
    savePath = IMAGE_SAVE_PATH + fileName + IMAGES_EXT
    print("savePath:" + savePath)
    return to_image.save(savePath)  # 保存新图


if __name__ == '__main__':
    for i in range(0, len(forders)):
        image_compose(forders[i])  # 调用函数

猜你喜欢

转载自blog.csdn.net/qq563129582/article/details/126280644