使用方法:
1. 将需要拼接的图片,放进一个文件夹;
2. 图片文件名为整数,程序会按数字顺序自动排序。
[Python] 纯文本查看 复制代码import os
from PIL import Image
def is_valid_image_name(filename):
""" 检查文件名是否为有效整数 """
try:
int(os.path.splitext(filename)[0])
return True
except ValueError:
return False
def stitch_images(folder_path):
# 获取文件夹中的所有文件,并按文件名排序
images = sorted([f for f in os.listdir(folder_path) if f.endswith('.jpg') or f.endswith('.png')],
key=lambda x: int(os.path.splitext(x)[0]) if is_valid_image_name(x) else float('inf'))
# 检查是否有非整数文件名
invalid_files = [f for f in images if not is_valid_image_name(f)]
if invalid_files:
print(f"以下文件名非有效:{invalid_files}")
return
# 打开所有图像并计算拼接后的总高度和最大宽度
image_list = [Image.open(os.path.join(folder_path, img)) for img in images]
max_width = max(img.width for img in image_list) # 取最大宽度
total_height = sum(img.height for img in image_list) # 所有图片高度总和
# 创建长图
stitched_image = Image.new('RGB', (max_width, total_height), color=(255, 255, 255))
# 将图片逐个粘贴到新图像中,每张图居中显示
y_offset = 0
for img in image_list:
# 计算居中位置
x_offset = (max_width - img.width) // 2
stitched_image.paste(img, (x_offset, y_offset))
y_offset += img.height
# 保存最终拼接图像
stitched_image.save(os.path.join(folder_path, 'stitched_image.jpg'), quality=100)
print(f"拼接完成!保存为:{os.path.join(folder_path, 'stitched_image.jpg')}")
if __name__ == "__main__":
folder_path = input("请输入图片文件夹路径:")
if os.path.isdir(folder_path):
stitch_images(folder_path)
else:
print("无效的文件夹路径,请重试。")
Snipaste_2024-10-12_15-07-41.jpg (231.32 KB, 下载次数: 0)
下载附件
2024-10-12 15:07 上传