功能简介
本脚本程序用于将指定路径下的图片横向拼接成一张长图并保存。用户可以自定义输出图片的文件名和保存路径。
工作流程
- 读取图片文件夹:程序首先会读取指定路径下的所有图片文件。
- 排序图片:根据文件名对图片进行排序。
- 加载图片:加载所有图片并获取它们的尺寸。
- 创建新图片:创建一个新的空白图片,颜色为白色。
- 拼接图片:将所有图片粘贴到新图片上。
- 保存新图片:将拼接后的新图片保存到指定路径。
代码展示
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格式的图片,请确保文件夹中的图片是这些格式。
- 文件权限:确保程序有权限读取和写入文件。
- 图片尺寸:程序会根据图片的最大宽度创建新图片,因此请确保所有图片的宽度相同,否则拼接后的图片可能会出现变形。
- 文件名排序:程序会根据文件名对图片进行排序,请确保文件名是按照预期顺序排列的。