前段时间需要合并一些图片,左右上下合并的都有,所以写了一个工具类。不是很完善,贴在这里备忘。 

import math
import os
from PIL import Image


# 获取某个目录的文件并按文件名排序
def get_image_list(folder):
    imgs = list()
    fs = os.listdir(folder)
    for f in fs:
        imgs.append(f)
    if len(imgs) != 0:
        imgs = imgs.sort()  # 把文件按文件名排序
    res = []  # 返回的文件名数组
    for img in imgs:
        res.append(os.path.join(folder, img))  # 拼接完整地址返回
    return res


# 图片拼接 pt = 1横向 2竖向
def merge_images(images, optimize=False,fname=1,pt=1):
    with Image.open(images[0]) as im:
        width, height = im.size
    if pt == 1:
        final = Image.new("RGBA", (width * len(images), height))
        i = 0
        for img in images:
            with Image.open(img) as im:
                print('merge {} ...'.format(img))
                final.paste(im, (i * width, 0))
            i += 1
        print(f'saving {fname}.png ...')
        final.save(f'{fname}.png', 'PNG', optimize=optimize)
    else:
        final = Image.new("RGBA", (width, height * len(images)))
        i = 0
        for img in images:
            with Image.open(img) as im:
                print('merge {} ...'.format(img))
                final.paste(im, (0, i * height))
            i += 1
        print(f'saving {fname}.png ...')
        final.save(f'{fname}.png', 'PNG', optimize=optimize)


# 合并图片
def hbimg(imgs,size,merge_name):
    bhimgs = []
    imgscount = int(math.ceil(len(imgs) / size))
    for x in range(imgscount):
        merge_images(imgs[size*x:size*(x+1)], True, x, 1)
        bhimgs.append(f'{x}.png')
    merge_images(bhimgs, True, merge_name, 2)
    for x in range(imgscount):
        os.remove(f'{x}.png')


if __name__ == '__main__':
    # 注意文件夹路径斜杠
    # 文件夹路径
    filepath = "C:/photo"
    # 合并后的名称
    merge_name = "合并后的图片"
    # 每一横排多少张图片
    size = 5

    # 开始合并
    imgs = get_image_list(filepath)
    print(imgs)
    hbimg(imgs, size, merge_name)

基本上是可以实现的。如果想竖着一列合并 size改成1 ,也就是每一横排1张 也可以不用修改其他地方。对了,图片千万按顺序命名。可以打log出来看,如果读出来的顺序正确那么合并的就是正确的顺序。

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐