如何使用Python按顺序横向合并图片路径列表中的多张图片
用Python横向拼接图片的完整方案
嘿,要实现这个按顺序横向拼接图片的需求,用Python的Pillow库(PIL的主流分支)是最直接的选择。下面我给你一步步讲清楚怎么做,包括基础实现和实用的优化技巧:
步骤1:安装依赖
首先确保你已经安装了Pillow,如果没有的话,打开终端运行:
pip install pillow
步骤2:基础实现代码
假设你的图片路径列表是img_paths = ['home/1.png','home/2.png', ...,'home/100.png'],直接用下面的代码就能完成拼接:
from PIL import Image # 你的图片路径列表 img_paths = ['home/1.png','home/2.png', ...,'home/100.png'] # 1. 加载所有图片(添加异常处理跳过损坏/无法打开的图片) images = [] for path in img_paths: try: img = Image.open(path) images.append(img) except Exception as e: print(f"跳过无法加载的图片 {path}: {str(e)}") if not images: print("没有可拼接的图片!") exit() # 2. 计算拼接后图片的尺寸 # 总宽度是所有图片宽度之和,高度取所有图片中的最大值(避免裁剪图片) total_width = sum(img.width for img in images) max_height = max(img.height for img in images) # 3. 创建空白画布(如果图片带透明通道,改用RGBA模式,color设为(0,0,0,0)) new_image = Image.new('RGB', (total_width, max_height), color='white') # 4. 逐张粘贴图片 x_offset = 0 for img in images: # 如果图片高度小于最大高度,居中粘贴(也可以选择顶部/底部对齐) y_offset = (max_height - img.height) // 2 new_image.paste(img, (x_offset, y_offset)) x_offset += img.width # 5. 保存拼接后的图片 new_image.save('横向拼接结果.png') print("拼接完成,结果已保存为 横向拼接结果.png")
实用优化技巧
- 统一图片高度:如果你的图片高度不一致,想要让它们统一高度再拼接,可以在加载图片后添加resize步骤:
# 自定义目标高度 target_height = 600 resized_images = [] for img in images: # 按比例计算新宽度,避免拉伸变形 ratio = target_height / img.height new_width = int(img.width * ratio) # 使用LANCZOS采样保证缩放质量 resized_img = img.resize((new_width, target_height), Image.Resampling.LANCZOS) resized_images.append(resized_img) # 后续计算尺寸和拼接时改用resized_images即可 - 透明背景支持:如果你的图片是带透明通道的PNG,创建画布时要改用RGBA模式,背景设为透明:
new_image = Image.new('RGBA', (total_width, max_height), color=(0, 0, 0, 0)) - 大数量图片优化:如果你的图片数量特别多(比如上千张),可以考虑分批次拼接,避免内存占用过高;但100张的话直接用基础代码完全没问题。
内容的提问来源于stack exchange,提问作者Anna




