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

如何用Python批量合并多文件夹中的同名图片?

解决多文件夹同名图片合并问题

核心思路

  1. 先梳理每个文件名对应的目标文件夹列表(可自动收集或手动指定规则)
  2. 读取对应文件夹下的同名图片文件
  3. 用图像处理工具完成合并,最后保存结果

具体实现步骤

首先安装依赖的图像处理库:

pip install pillow

方案1:自动匹配所有包含同名文件的文件夹

适合规则不固定,只要是多文件夹存在的同名图就合并的场景:

import os
from PIL import Image

# 替换成你的实际文件夹路径
folders = {
    "folder1": "./folder1",
    "folder2": "./folder2",
    "folder3": "./folder3",
    "folder4": "./folder4"
}

# 创建结果保存目录
output_dir = "./merged_result"
os.makedirs(output_dir, exist_ok=True)

# 收集每个图片文件对应的文件夹路径
file_folder_map = {}
for folder_name, folder_path in folders.items():
    for filename in os.listdir(folder_path):
        if filename.endswith(".png"):
            if filename not in file_folder_map:
                file_folder_map[filename] = []
            file_folder_map[filename].append(folder_path)

# 处理合并逻辑
for filename, paths in file_folder_map.items():
    # 跳过仅单个文件夹存在的图片
    if len(paths) < 2:
        continue
    
    # 读取所有目标图片
    images = []
    for path in paths:
        img_path = os.path.join(path, filename)
        img = Image.open(img_path).convert("RGBA")
        images.append(img)
    
    # 横向拼接合并(可改为纵向,只需调整尺寸计算)
    total_width = sum(img.width for img in images)
    max_height = max(img.height for img in images)
    merged_img = Image.new("RGBA", (total_width, max_height))
    
    current_x = 0
    for img in images:
        merged_img.paste(img, (current_x, 0))
        current_x += img.width
    
    # 保存合并后的图片
    output_path = os.path.join(output_dir, f"{os.path.splitext(filename)[0]}_merged.png")
    merged_img.save(output_path, "PNG")
    print(f"完成合并:{filename} -> {output_path}")

方案2:按指定规则手动匹配文件夹

适合有固定合并规则的场景,比如你示例中的a_1只合并folder1、2、3:

import os
from PIL import Image

folders = {
    "folder1": "./folder1",
    "folder2": "./folder2",
    "folder3": "./folder3",
    "folder4": "./folder4"
}

output_dir = "./merged_result"
os.makedirs(output_dir, exist_ok=True)

# 手动定义每个图片的合并文件夹规则
custom_merge_rules = {
    "a_1.png": ["folder1", "folder2", "folder3"],
    "a_2.png": ["folder1", "folder4"],
    "a_3.png": ["folder1", "folder2"],
    "a_5.png": ["folder2", "folder4"],
    "a_6.png": ["folder3", "folder4"]
}

# 转换为实际文件路径
for filename, folder_names in custom_merge_rules.items():
    img_paths = [os.path.join(folders[name], filename) for name in folder_names]
    
    # 读取图片
    images = [Image.open(path).convert("RGBA") for path in img_paths]
    
    # 横向拼接(可按需修改合并方式)
    total_width = sum(img.width for img in images)
    max_height = max(img.height for img in images)
    merged_img = Image.new("RGBA", (total_width, max_height))
    
    current_x = 0
    for img in images:
        merged_img.paste(img, (current_x, 0))
        current_x += img.width
    
    output_path = os.path.join(output_dir, f"{os.path.splitext(filename)[0]}_merged.png")
    merged_img.save(output_path, "PNG")
    print(f"完成合并:{filename} -> {output_path}")

自定义调整提示

  • 合并方式:如果需要纵向拼接,把总宽度改为最大宽度,总高度改为所有图片高度之和,粘贴时修改y轴坐标即可
  • 尺寸统一:如果图片尺寸差异大,可以在读取后添加img = img.resize((600, 600))(替换成你需要的尺寸)来统一大小
  • 格式兼容:如果有JPG等其他格式,修改endswith(".png")为endswith((".png", ".jpg", ".jpeg"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 03:07:20