You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python批量将图片成对横向合并为单张图片?

批量横向合并成对图片的Python实现

我懂你现在的情况——已经能搞定单张配对的合并,就差把这个逻辑套进循环里处理文件夹里所有成对的图片对吧?下面给你整理一套完整的解决方案,用Pillow库(也就是PIL的升级版)来实现,完全贴合你的需求:

先做准备工作

首先确保你已经安装了Pillow,没装的话跑这个命令:

pip install pillow

完整代码示例

from PIL import Image
import os

def merge_pair(img1_path, img2_path, output_path):
    # 打开两张目标图片
    img_left = Image.open(img1_path)
    img_right = Image.open(img2_path)
    
    # 先确认两张图尺寸一致(毕竟都是3×4英寸,避免意外)
    if img_left.size != img_right.size:
        print(f"警告:{img1_path}和{img2_path}尺寸不一致,跳过这组")
        return
    
    # 创建横向拼接的新画布:宽度是两张之和,高度和原图一致
    merged_width = img_left.width + img_right.width
    merged_height = img_left.height
    merged_img = Image.new(img_left.mode, (merged_width, merged_height))
    
    # 把两张图分别贴到左右两侧
    merged_img.paste(img_left, (0, 0))
    merged_img.paste(img_right, (img_left.width, 0))
    
    # 保存时保留原图片的DPI,确保合并后是6×4英寸的规格
    merged_img.save(output_path, dpi=img_left.info.get('dpi', (72, 72)))

def batch_merge(folder_dir):
    # 把文件夹里的图片按名称排序,保证配对顺序正确
    all_imgs = sorted([f for f in os.listdir(folder_dir) 
                       if f.lower().endswith(('.png', '.jpg', '.jpeg'))])
    
    # 两两分组处理,步长设为2
    for idx in range(0, len(all_imgs), 2):
        # 防止最后只剩一张没配对的情况
        if idx + 1 >= len(all_imgs):
            print(f"提示:{all_imgs[idx]}没有配对图片,跳过")
            continue
        
        # 获取当前组的两张图路径
        img1_name = all_imgs[idx]
        img2_name = all_imgs[idx+1]
        img1_path = os.path.join(folder_dir, img1_name)
        img2_path = os.path.join(folder_dir, img2_name)
        
        # 生成输出文件名:比如img01+img02→img01_2,img519+img520→img519_520
        img1_base = os.path.splitext(img1_name)[0]
        img2_num = img2_name.split('img')[-1]
        output_name = f"{img1_base}_{img2_num}{os.path.splitext(img1_name)[1]}"
        output_path = os.path.join(folder_dir, output_name)
        
        # 执行合并
        merge_pair(img1_path, img2_path, output_path)
        print(f"完成合并:{img1_name} + {img2_name} → {output_name}")

if __name__ == "__main__":
    # 替换成你的图片文件夹路径,比如"./my_images"
    target_folder = "./your_image_folder"
    batch_merge(target_folder)

代码细节说明

  • merge_pair函数:负责单对图片的合并逻辑,打开图片后检查尺寸一致性,创建新画布粘贴两张图,保存时保留原DPI确保物理尺寸正确(6×4英寸)。
  • batch_merge函数:处理批量循环逻辑,先按名称排序图片保证配对顺序,然后步长为2遍历分组,生成符合要求的输出文件名,调用合并函数完成操作。
  • 命名规则处理:通过拆分文件名提取数字部分,实现img01+img02→img01_2的命名效果。
  • 异常处理:针对尺寸不一致、最后单张无配对的情况做了提示,避免程序崩溃。

注意事项

  • 确保所有原图片都是3×4英寸的统一规格,这样合并后的尺寸才会准确是6×4英寸。
  • 如果你的图片DPI不是默认的72,代码会自动读取原图片的DPI信息,不用额外调整。
  • 支持png、jpg、jpeg格式,要是有其他格式,直接在all_imgs的筛选条件里添加就行。

内容的提问来源于stack exchange,提问作者monicam

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:55:27