如何为Python PIL图片叠加代码添加循环实现多组图片批量处理
批量图片叠加实现方案
可以通过循环批量完成该处理,只要两个文件夹内的图片是一一对应关系即可,以下是可直接复用的代码:
import os from PIL import Image, ImageOps # 请修改为你自己的文件夹路径 FRONT_FOLDER = "./front_images" # 存放前景图的文件夹 BG_FOLDER = "./background_images" # 存放对应背景图的文件夹 OUT_FOLDER = "./output_images" # 处理后图片的保存文件夹 # 自动创建输出文件夹,避免路径不存在报错 os.makedirs(OUT_FOLDER, exist_ok=True) # 支持处理的图片格式,可按需补充 SUPPORT_EXTS = ('.png', '.jpg', '.jpeg', '.bmp') # 遍历前景文件夹内的所有文件 for filename in os.listdir(FRONT_FOLDER): # 跳过非图片文件 if not filename.lower().endswith(SUPPORT_EXTS): continue # 拼接前景图、背景图、输出图的完整路径 front_path = os.path.join(FRONT_FOLDER, filename) bg_path = os.path.join(BG_FOLDER, filename) out_path = os.path.join(OUT_FOLDER, filename) # 跳过不存在对应背景图的文件 if not os.path.exists(bg_path): print(f"跳过文件{filename}:未找到对应背景图") continue # 复用你原有的叠加逻辑 img = Image.open(front_path, 'r') img_w, img_h = img.size background = Image.open(bg_path, 'r') bg_w, bg_h = background.size offset = ((bg_w - img_w) // 1, (bg_h - img_h) // 6) # 注意:如果你的前景图是带透明通道的PNG,请替换为下一行代码避免透明区域变白底 # background.paste(img, offset, mask=img) background.paste(img, offset) background.save(out_path) print(f"已完成:{filename}")
注意事项
- 代码默认要求前景图和背景图文件名完全一致,如果你的命名规则不同(比如前景为
front_001.png、背景为bg_001.png),自行修改bg_path的拼接逻辑即可 - 如果需要按序号顺序匹配而非文件名匹配,可分别读取两个文件夹的排序后文件列表,按索引一一对应调用即可
- 处理1000张以上图片不会有性能问题,PIL的处理效率足够支撑该量级的批量任务
内容的提问来源于stack exchange,提问作者lasserrebreno
相关产品推荐
相关产品推荐

