如何用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
相关产品推荐
相关产品推荐

