一个用来批量裁掉图片顶部像素的小工具:选一批尺寸一致的竖版图片,统一削掉顶部固定的几条像素,输出到每张原图所在目录下的 cropped 文件夹。
典型场景:手机/相机导出的图片是 1200 × 2608,某个平台要求 1200 × 2486,而需要去掉的正好是最上面的 122 像素(2608 - 2486 = 122)。手动一张张裁太慢,这个脚本一次搞定。
- 多选批量处理:弹出系统文件选择窗口,按住
Ctrl多选,一次处理整批图片。 - 原地就近输出:来源图片在哪个目录,就在那个目录下创建
cropped子文件夹存放结果,不做跨目录搬运。 - 尺寸校验:只处理尺寸恰好匹配的图片,尺寸不符的直接跳过,避免误裁剪。
- 不覆盖已有文件:目标文件重名时自动追加
_1、_2,不会悄悄盖掉你之前的结果。 - 自动摆正:读取 EXIF 方向信息,手机竖拍的照片不会被裁错方向。
- 单张失败不中断:某张图片损坏或格式异常,会记录原因后继续处理其余图片。
- 结果汇总:控制台打印每张图的处理结果,结束时弹窗汇总成功 / 跳过 / 失败的数量与原因。
- Python 3.9 及以上(脚本使用了
tuple[int, int] | None这样的类型标注) - Pillow(图像处理库)
- 需要图形界面(脚本用
tkinter弹出选图窗口;tkinter随官方 Python 安装包一起提供)
pip install pillow如果 pip 命令不可用,见下方常见问题。
-
在脚本所在目录打开 PowerShell / 终端:
py .\batch_crop_top.py
-
在弹出的窗口中按住
Ctrl多选图片,确认。 -
控制台会逐张打印处理结果,结束时弹窗汇总。
处理完成后,目录结构大致如下:
C:\photos\
├── IMG_0001.jpg # 原图,不动
├── IMG_0002.jpg
└── cropped\ # 自动创建
├── IMG_0001.jpg # 1200x2486
└── IMG_0002.jpg
如果多选的图片分散在不同目录,那么每个目录下都会各自生成一个 cropped 文件夹。
脚本顶部有一小块配置区,改常量即可适配别的尺寸,无需改动逻辑:
| 常量 | 默认值 | 说明 |
|---|---|---|
EXPECTED_SIZE |
(1200, 2608) |
期望的原始尺寸 (宽, 高);设为 None 表示不校验尺寸 |
CROP_TOP |
122 |
裁掉的顶部像素数;设为 None 时按「原高 − 目标高」自动计算 |
TARGET_SIZE |
(1200, 2486) |
目标尺寸 (宽, 高),用于二次校验裁剪结果 |
OUTPUT_DIR_NAME |
"cropped" |
输出子目录名,想叫 裁剪后的 也可以直接改这里 |
JPEG_QUALITY |
95 |
JPEG 保存质量(1–100) |
例如想把 1080×2400 的图裁成 1080×2280:
EXPECTED_SIZE = (1080, 2400)
CROP_TOP = 120
TARGET_SIZE = (1080, 2280)脚本对每张图片执行 Image.crop((0, top, width, height)),也就是保留 top 以下的全部区域,宽度和底部边缘完全不变。裁剪量由 CROP_TOP 直接给定,或由 EXPECTED_SIZE 与 TARGET_SIZE 的高度差推出。
保存时沿用原文件的扩展名;不在支持列表里的格式统一存为 PNG。JPEG 会先转成 RGB,避免带透明通道的图片保存报错。
topcrop/
├── batch_crop_top.py # 主脚本,含配置区与裁剪逻辑
├── requirements.txt
├── tests/
│ └── test_crop.py # 核心逻辑单元测试
├── LICENSE
└── README.md
python -m unittest discover -s tests -v测试覆盖输出尺寸、裁剪起点是否正确落在 y=122、尺寸不符时跳过、同名文件不被覆盖、RGBA 图片保存,以及文件不存在时的错误处理。裁剪逻辑函数 crop_one() 不依赖 tkinter,可以单独导入复用。
pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
这通常是 Windows 找不到独立的 pip 命令,也就是 Python 或其 Scripts 目录没进系统 PATH。先不用改环境变量,直接在 PowerShell 里按顺序试:
py -m pip install pillow如果提示 py 也找不到,再试:
python -m pip install pillowWindows 官方更推荐 py -m pip 或 python -m pip,因为它能保证 pip 对应的是当前运行脚本的那套 Python。
先执行:
py -m ensurepip --upgrade然后:
py -m pip install --upgrade pip
py -m pip install pillowensurepip 是 Python 自带的 pip 修复/安装模块。
大概率是还没正确安装 Python,或安装时没有加入 PATH。
- 从 Python 官网下载页 安装 Python。
- 安装界面务必勾选底部的
Add python.exe to PATH。 - 安装完成后关闭当前 PowerShell 窗口并重新打开。
- 检查:
py --version - 安装依赖:
py -m pip install pillow
把命令里的文件名换成实际名称即可:
py .\你的脚本名.py说明尺寸和 EXPECTED_SIZE 不匹配。控制台的 [跳过] 行会打印实际尺寸,照着改配置区即可。若某些图片被旋转过(例如手机竖拍存成 2608×1200),脚本会先按 EXIF 摆正再判断尺寸,因此一般不会误判。
把 OUTPUT_DIR_NAME 改成 "裁剪后的" 即可。