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

使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 13:45:08