Python_PIL_多图片纵向拼接

功能简介

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

工作流程

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

代码展示 

from PIL import Image
import os

def zongxiang_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)

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

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

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

    # 保存新图片
    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
zongxiang_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格式的图片,请确保文件夹中的图片是这些格式。
  • 文件权限:确保程序有权限读取和写入文件。
  • 图片尺寸:程序会根据图片的最大宽度创建新图片,因此请确保所有图片的宽度相同,否则拼接后的图片可能会出现变形。
  • 文件名排序:程序会根据文件名对图片进行排序,请确保文件名是按照预期顺序排列的。 
### 回答1: 可以使用PythonPillow库实现图像的纵向拼接。具体实现步骤如下: 1. 导入Pillow库:`from PIL import Image` 2. 打开图片并获取图片尺寸:`image1 = Image.open('image1.jpg')`,`image2 = Image.open('image2.jpg')`,`width, height = image1.size` 3. 创建一个新的空白图片,大小为两张原图的高度之和:`new_image = Image.new('RGB', (width, height * 2))` 4. 将两张图片分别拼接到新的空白图片上:`new_image.paste(image1, (0, 0))`,`new_image.paste(image2, (0, height))` 5. 保存新的图片:`new_image.save('new_image.jpg')` 这样就可以实现两张图片纵向拼接了。如果要拼接多张图片,可以使用循环遍历的方式实现。 ### 回答2: 在Python中,可以使用PILPython Imaging Library)库来实现图像的纵向拼接PIL库提供了Image模块,它包含了处理图像的各种方法。 首先,我们需要导入PIL库和Image模块: ```python from PIL import Image ``` 然后,我们可以使用open()函数打开图像文件,使用resize()函数调整图像大小,并使用concatenate()函数进行纵向拼接。 下面是一个简单的示例代码: ```python # 打开第一张图像 image1 = Image.open('image1.jpg') # 打开第二张图像 image2 = Image.open('image2.jpg') # 调整图像大小 resized_img1 = image1.resize((image1.width, image1.height//2)) resized_img2 = image2.resize((image2.width, image2.height//2)) # 拼接图像 result = Image.concatenate((resized_img1, resized_img2)) # 保存拼接后的图像 result.save('result.jpg') ``` 在这个示例中,我们先打开两张图像,然后使用resize()函数将图像的高度调整为原来的一半。接下来,使用concatenate()函数将两张调整后的图像纵向拼接起来,生成一个新的图像。最后,使用save()函数保存拼接后的图像。 请确保图像文件存在并替换'ima ### 回答3: 在Python中,可以使用PILPython Imaging Library)库进行图像的纵向拼接。以下是一个简单的示例代码: from PIL import Image def concatenate_images_vertically(image1_path, image2_path, result_path): # 打开两个图像 image1 = Image.open(image1_path) image2 = Image.open(image2_path) # 获取两个图像的尺寸 width1, height1 = image1.size width2, height2 = image2.size # 确定拼接后图像的尺寸 result_width = max(width1, width2) result_height = height1 + height2 # 创建一个新的空白图像,用于存储拼接后的结果 result_image = Image.new('RGB', (result_width, result_height)) # 将两个图像粘贴到结果图像上 result_image.paste(image1, (0, 0)) result_image.paste(image2, (0, height1)) # 保存拼接后的结果图像 result_image.save(result_path) # 调用函数进行图像拼接 concatenate_images_vertically('image1.jpg', 'image2.jpg', 'result.jpg') 上述代码中,首先引入了PIL库中的Image模块。然后定义了一个名为concatenate_images_vertically的函数,接受三个参数:图像1的路径、图像2的路径和拼接后结果图像的保存路径。 在函数内部,使用Image.open方法打开了两个图像,并使用Image.size获取了它们的尺寸。然后根据最大的宽度和总高度创建了一个新的空白图像。 接下来,使用Image.paste方法将两个图像分别粘贴到了结果图像上,分别粘贴到了(0,0)和(0,height1)的位置,垂直拼接。 最后,使用Image.save方法保存了拼接后的结果图像。 通过调用concatenate_images_vertically函数,并传入合适的参数,即可实现图像的纵向拼接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值