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

使用Python PIL或cv2批量裁剪文件夹图片分片后保存到新目录问题

代码问题排查与修正方案

原代码核心问题

  • 读取文件时只拿到了BeforeAfter下的文件名,没有拼接完整路径,程序找不到原图片,自然不会执行后续逻辑
  • 保存裁剪图时只传了CroppedImages文件夹路径,没有指定具体文件名,无法正常写入文件
  • 没有提前创建CroppedImages、分片存储的目标文件夹,路径不存在时会写入失败
  • PIL的crop方法要求传入整数像素坐标,浮点数会导致裁剪精度异常
  • 注释的分片逻辑没有关联裁剪后的图片路径,无法正常执行分片操作

修正后可运行代码

from PIL import Image        
import image_slicer
import os

# 配置参数,后续修改路径/参数直接改这里即可
RAW_IMG_DIR = "BeforeAfter"  # 原图片存放文件夹
CROPPED_IMG_DIR = "CroppedImages"  # 裁剪后图片存放文件夹
SLICE_TARGET_DIR = "frames"  # 分片后切片存放文件夹
SLICE_NUM = 12  # 每张图分片的数量

# 提前创建所有需要的文件夹,不存在就新建,存在也不会报错
os.makedirs(CROPPED_IMG_DIR, exist_ok=True)
os.makedirs(SLICE_TARGET_DIR, exist_ok=True)

def crop_and_slice():
    # 遍历原文件夹下的所有文件
    for filename in os.listdir(RAW_IMG_DIR):
        # 拼接原文件的完整路径
        raw_img_path = os.path.join(RAW_IMG_DIR, filename)
        # 跳过文件夹,只处理文件
        if not os.path.isfile(raw_img_path):
            continue
        # 读取图片
        img = Image.open(raw_img_path)
        # 裁剪坐标转整数,符合PIL要求
        left = 67
        top = 37
        right = 1212
        bottom = 551
        # 执行裁剪
        im_crop = img.crop((left, top, right, bottom))
        # 拼接裁剪后文件的保存路径,保留原文件名存为PNG
        filename_no_ext = os.path.splitext(filename)[0]
        cropped_img_path = os.path.join(CROPPED_IMG_DIR, f"{filename_no_ext}.png")
        # 保存裁剪后的图片
        im_crop.save(cropped_img_path, "PNG", quality=100)
        # 执行分片操作
        tiles = image_slicer.slice(cropped_img_path, SLICE_NUM, save=False)
        # 保存分片结果到目标目录,用原文件名做前缀避免重名覆盖
        image_slicer.save_tiles(tiles, directory=SLICE_TARGET_DIR, prefix=filename_no_ext)

if __name__ == "__main__":
    crop_and_slice()

使用注意事项

  • 运行前确保已经安装了依赖:pip install pillow image_slicer
  • 如果需要调整裁剪坐标、分片数量、各文件夹路径,直接修改代码开头的配置参数即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 14:54:04