前言
上一篇文章,我们把一张超大图给拆分成了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]) # 调用函数