本文目录导读:

- 方案一:使用Python(最灵活、跨平台)
- 方案二:使用ImageMagick(命令行之王)
- 方案三:使用Photoshop动作(Windows/macOS图形化)
- 方案四:使用GraphicsMagick(轻量版ImageMagick)
- 常见问题处理
- 推荐选择
当然可以!批量裁剪图片为统一尺寸是常见的图像处理需求,使用脚本可以高效完成,下面我为你介绍几种主流方法,包括Python、命令行工具和Photoshop脚本。
使用Python(最灵活、跨平台)
Python结合Pillow库是处理图像批量的利器。
安装Pillow库
pip install pillow
批量裁剪脚本(居中裁剪)
此脚本会将指定文件夹内所有图片从中心裁剪到目标尺寸(如 800x600)。
import os
from PIL import Image
def batch_crop_to_size(input_folder, output_folder, target_size=(800, 600)):
"""
批量裁剪图片为统一尺寸(居中裁剪)
:param input_folder: 输入文件夹路径
:param output_folder: 输出文件夹路径
:param target_size: 目标尺寸 (宽, 高)
"""
# 创建输出文件夹
os.makedirs(output_folder, exist_ok=True)
# 支持的图片格式
extensions = ('.jpg', '.jpeg', '.png', '.bmp', '.tiff')
# 遍历输入文件夹
for filename in os.listdir(input_folder):
if filename.lower().endswith(extensions):
input_path = os.path.join(input_folder, filename)
output_path = os.path.join(output_folder, filename)
try:
img = Image.open(input_path)
# 计算裁剪区域(居中裁剪)
width, height = img.size
target_width, target_height = target_size
# 计算起始坐标
left = (width - target_width) // 2
top = (height - target_height) // 2
right = left + target_width
bottom = top + target_height
# 注意:如果图片小于目标尺寸,会报错
# 这里可以添加检查或缩放逻辑
if width < target_width or height < target_height:
# 方法1:缩放图片后再裁剪
img = img.resize(target_size, Image.LANCZOS)
img.save(output_path)
print(f"已缩放并保存: {filename}")
continue
# 裁剪并保存
cropped_img = img.crop((left, top, right, bottom))
cropped_img.save(output_path)
print(f"已裁剪: {filename}")
except Exception as e:
print(f"处理 {filename} 时出错: {e}")
# 使用示例
if __name__ == "__main__":
input_folder = "./input_images" # 替换为你的输入文件夹
output_folder = "./output_images" # 替换为你的输出文件夹
target_size = (800, 600) # 目标尺寸:宽800,高600
batch_crop_to_size(input_folder, output_folder, target_size)
使用ImageMagick(命令行之王)
ImageMagick的mogrify命令可以直接批量处理。
安装ImageMagick
- Windows: 下载安装包 ImageMagick官网
- macOS:
brew install imagemagick - Linux:
sudo apt-get install imagemagick
批量裁剪命令(居中裁剪)
# 进入图片文件夹 cd /path/to/your/images # 创建输出目录 mkdir -p output # 批量裁剪所有jpg为800x600,居中裁剪 magick mogrify -path output -gravity center -crop 800x600+0+0 -resize 800x600 *.jpg
解释:
-path output:输出到output文件夹-gravity center:从中心开始裁剪-crop 800x600+0+0:裁剪尺寸-resize 800x600:先缩放再裁剪(防止图片太小)
对于PNG等其他格式:
magick mogrify -path output -gravity center -crop 800x600+0+0 *.png
使用Photoshop动作(Windows/macOS图形化)
如果你习惯用PS,可以录制动作后批量处理。
- 打开Photoshop,打开一张图片
- 窗口 → 动作(Alt+F9)
- 点击新建动作,命名为“批量裁剪800x600”
- 点击录制,然后进行以下操作:
- 选择裁剪工具,设置宽度800px、高度600px、分辨率300px/英寸
- 裁剪图片到合适区域
- 文件 → 存储(或存储为Web所用格式)
- 关闭图片
- 点击停止录制
- 文件 → 自动 → 批处理:
- 选择刚刚录制的动作
- 源:选择图片文件夹
- 目标:选择输出文件夹
- 勾选“覆盖动作中的‘打开’命令”和“覆盖动作中的‘存储为’命令”
使用GraphicsMagick(轻量版ImageMagick)
# 安装:apt-get install graphicsmagick(Linux) # 批量裁剪 gm mogrify -path output -crop 800x600+0+0 -resize 800x600 *.jpg
常见问题处理
图片小于目标尺寸怎么办?
上述Python脚本中我添加了缩放处理,或者可以跳过:
if width < target_width or height < target_height:
print(f"跳过 {filename}:尺寸太小")
continue
如何按比例填充(而不是裁剪)?
如果想保持原始比例,但填充到目标尺寸(比如添加白边):
from PIL import ImageOps
# 创建新画布
new_img = Image.new('RGB', target_size, (255, 255, 255))
# 缩放图片(保持比例)
img.thumbnail((target_width, target_height), Image.LANCZOS)
# 居中粘贴
paste_x = (target_width - img.width) // 2
paste_y = (target_height - img.height) // 2
new_img.paste(img, (paste_x, paste_y))
new_img.save(output_path)
处理子文件夹?
Python版可以递归遍历:
for root, dirs, files in os.walk(input_folder):
for filename in files:
# ... 处理每个文件
output_path = os.path.join(output_folder, os.path.relpath(input_path, input_folder))
推荐选择
- Python:适合需要自定义处理逻辑(如加水印、重命名)
- ImageMagick:适合纯批量处理,速度最快
- Photoshop:适合一次性任务且熟悉PS操作
你可以根据需求选择最适合的方法,如果需要更复杂的逻辑(如按百分比裁剪、检测人脸裁剪等),可以告诉我具体需求,我可以帮你定制脚本。