使用Python PIL批量处理文件夹图片生成重复平铺背景图求助
问题排查与解决方案
现有代码错误点
- 直接将文件夹路径传入
Image.open(),该方法仅支持读取单个图片文件路径,无法直接读取文件夹 - 缺少遍历
./images目录下所有图片文件的逻辑,无法批量处理多张图 - 保存文件时直接将Image对象
new_im与字符串拼接,存在类型错误,无法生成合法的保存路径 - 遗漏了
Image.MAX_IMAGE_PIXELS = None配置,处理大尺寸平铺图时可能触发PIL的像素数限制报错 - 未判断
./tiled目录是否存在,若目录不存在会触发保存路径不存在的报错
修复后可运行代码
from PIL import Image import os Image.MAX_IMAGE_PIXELS = None # 配置输入输出路径 INPUT_DIR = "./images/" OUTPUT_DIR = "./tiled/" # 平铺目标尺寸 TARGET_SIZE = (7000, 9240) # 自动创建输出目录(不存在时) os.makedirs(OUTPUT_DIR, exist_ok=True) # 遍历输入目录下所有文件 for filename in os.listdir(INPUT_DIR): # 过滤常见图片格式,跳过非图片文件 if not filename.lower().endswith(('.jpg', '.jpeg', '.png', '.bmp', '.webp')): continue # 拼接完整输入路径 input_path = os.path.join(INPUT_DIR, filename) # 读取原图 bg = Image.open(input_path) bg_w, bg_h = bg.size # 创建目标尺寸空白画布 new_im = Image.new('RGB', TARGET_SIZE) w, h = new_im.size # 平铺填充 for i in range(0, w, bg_w): for j in range(0, h, bg_h): new_im.paste(bg, (i, j)) # 生成输出文件名,保留原文件名前缀 output_filename = f"tiled_{os.path.splitext(filename)[0]}.png" output_path = os.path.join(OUTPUT_DIR, output_filename) new_im.save(output_path)
内容的提问来源于stack exchange,提问作者python-noob
相关产品推荐
相关产品推荐

