Python_PIL_多图片横向拼接

功能简介

        本脚本程序用于将指定路径下的图片横向拼接成一张长图并保存。用户可以自定义输出图片的文件名和保存路径。

工作流程

  1. 读取图片文件夹:程序首先会读取指定路径下的所有图片文件。
  2. 排序图片:根据文件名对图片进行排序。
  3. 加载图片:加载所有图片并获取它们的尺寸。
  4. 创建新图片:创建一个新的空白图片,颜色为白色。
  5. 拼接图片:将所有图片粘贴到新图片上。
  6. 保存新图片:将拼接后的新图片保存到指定路径。

代码展示 

from PIL import Image
import os

def hengxiang_splicing(folder_path, output_path,reverse=False):
    """
    将指定路径下的图片横向拼接成一张长图并保存。

    :param folder_path: 图片文件夹路径
    :param output_path: 输出长图的保存路径
    """
    # 获取文件夹内所有图片的路径
    images_path = []
    for f in os.listdir(folder_path):
        if f.endswith(('.png', '.jpg', '.jpeg')):
            images_path.append(os.path.join(folder_path, f))

    # 对文件名进行排序
    images_path.sort(reverse=reverse)
    # 初始化一个空的Image对象用于拼接图片
    widths, heights = [], []
    images = []

    # 加载所有图片并获取它们的尺寸
    for img_path in images_path:
        img = Image.open(img_path)
        images.append(img)
        widths.append(img.width)
        heights.append(img.height)

    # 计算新图片的宽度(所有图片宽度之和)和高度(最大高度,保证图片不失其)
    total_width = sum(widths)
    max_height = max(heights)


    # 创建一个新的空白图片,颜色为白色(RGB模式)
    new_image = Image.new('RGB', (total_width, max_height), color='white')

    # 遍历每张图片,粘贴到新图片上
    x_position = 0
    for img in images:
        new_image.paste(img, (x_position, 0))
        x_position += img.width

    # 保存新图片
    new_image.save(output_path)
    print(f"长图已保存至{output_path}")


# 用户修改部分!!!
# 图片文件夹路径
folder_path = r'E:\Pycharm\pythonProject\PIL'

# 图片输出路径和文件名,默认结果1
# 结果1:自定义文件名并将新图片和py文件保存在同一个文件夹下
output_image_path = '合成图.png'
# 结果2:自定义文件名并将新图片保存在指定文件夹下
# output_image_path =r'E:\Pycharm\pythonProject\PIL\02.png'

# 调用函数
# 默认图片安装文件名升序进行依次拼接,若要输出图片按文件名降序拼接将False改为True
hengxiang_splicing(folder_path, output_image_path,reverse=False)


使用库及函数

1. PIL库

函数:Image.open()

  • 功能:打开一个图像文件,返回一个Image对象。
  • 参数:filename - 图像文件的路径。
  • 返回值:返回一个Image对象。

函数:Image.new()

  • 功能:创建一个新的空白图像。
  • 参数:mode - 图像模式;size - 图像尺寸;color - 图像颜色。
  • 返回值:返回一个Image对象。 

函数:Image.paste()

  • 功能:将一张图像粘贴到另一张图像上。
  • 参数:img - 要粘贴的图像;box - 粘贴的位置。
  • 返回值:无。

2. os库 

函数:os.listdir() 

  • 功能:列出指定目录下的所有文件和目录。
  • 参数:path - 要列出的目录路径。
  • 返回值:返回一个包含目录中所有文件和目录名的列表。 

函数:os.path.join()

  • 功能:将多个路径组合成一个路径。
  • 参数:path1 - 第一个路径;path2 - 第二个路径。
  • 返回值:返回一个组合后的路径。 

运行注意事项 

  • 图片格式:程序只处理.png、.jpg和.jpeg格式的图片,请确保文件夹中的图片是这些格式。
  • 文件权限:确保程序有权限读取和写入文件。
  • 图片尺寸:程序会根据图片的最大宽度创建新图片,因此请确保所有图片的宽度相同,否则拼接后的图片可能会出现变形。
  • 文件名排序:程序会根据文件名对图片进行排序,请确保文件名是按照预期顺序排列的。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值