You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用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

火山引擎 最新活动