python图片合并代码

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

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出来看,如果读出来的顺序正确那么合并的就是正确的顺序。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值