方法1:使用 Python + Pillow(推荐)
import os
from PIL import Image
import glob
def batch_crop_center(input_folder, output_folder, crop_size):
"""
批量裁剪图片中心
:param input_folder: 输入文件夹路径
:param output_folder: 输出文件夹路径
:param crop_size: (width, height) 裁切后的尺寸
"""
# 创建输出文件夹
os.makedirs(output_folder, exist_ok=True)
# 支持的图片格式
extensions = ['*.jpg', '*.jpeg', '*.png', '*.bmp', '*.gif']
for ext in extensions:
for img_path in glob.glob(os.path.join(input_folder, ext)):
try:
# 打开图片
img = Image.open(img_path)
# 计算中心区域
width, height = img.size
new_width, new_height = crop_size
left = (width - new_width) // 2
top = (height - new_height) // 2
right = left + new_width
bottom = top + new_height
# 裁剪并保存
cropped = img.crop((left, top, right, bottom))
# 生成输出文件名
filename = os.path.basename(img_path)
output_path = os.path.join(output_folder, filename)
cropped.save(output_path)
print(f"已处理: {filename}")
except Exception as e:
print(f"处理 {img_path} 时出错: {e}")
# 使用示例
if __name__ == "__main__":
input_dir = "input_images" # 原图文件夹
output_dir = "cropped_images" # 输出文件夹
crop_size = (500, 500) # 裁切尺寸 (宽, 高)
batch_crop_center(input_dir, output_dir, crop_size)
方法2:使用 ImageMagick(命令行)
#!/bin/bash
# Linux/Mac 批量裁剪中心
input_dir="input_images"
output_dir="cropped_images"
width=500
height=500
mkdir -p "$output_dir"
for img in "$input_dir"/*.{jpg,jpeg,png,bmp}; do
if [ -f "$img" ]; then
filename=$(basename "$img")
# -gravity center: 从中心裁剪
# -extent: 裁切尺寸
convert "$img" -gravity center -extent "${width}x${height}" "$output_dir/$filename"
echo "已处理: $filename"
fi
done
方法3:使用 Python + OpenCV(高级版)
import cv2
import os
import glob
def batch_crop_center_opencv(input_folder, output_folder, crop_width, crop_height):
"""
使用OpenCV批量裁剪图片中心
"""
os.makedirs(output_folder, exist_ok=True)
extensions = ['*.jpg', '*.jpeg', '*.png', '*.bmp']
for ext in extensions:
for img_path in glob.glob(os.path.join(input_folder, ext)):
try:
# 读取图片
img = cv2.imread(img_path)
if img is None:
continue
height, width = img.shape[:2]
# 计算中心区域
start_x = (width - crop_width) // 2
start_y = (height - crop_height) // 2
# 裁剪
cropped = img[start_y:start_y + crop_height,
start_x:start_x + crop_width]
# 保存
filename = os.path.basename(img_path)
output_path = os.path.join(output_folder, filename)
cv2.imwrite(output_path, cropped)
print(f"已处理: {filename}")
except Exception as e:
print(f"处理 {img_path} 时出错: {e}")
使用方法:
Python 脚本:
# 安装依赖 pip install pillow opencv-python # 运行脚本 python crop_images.py
ImageMagick (Linux/Mac):
# 安装ImageMagick sudo apt-get install imagemagick # Ubuntu brew install imagemagick # Mac # 运行脚本 chmod +x crop_center.sh ./crop_center.sh
实用技巧:
-
保持原比例:如果不想强制尺寸,可以先等比例缩放:

def crop_and_resize(input_path, output_path, size): img = Image.open(input_path) # 先缩放到目标尺寸 img.thumbnail(size, Image.LANCZOS) # 再从中心裁剪 width, height = img.size left = (width - size[0]) // 2 top = (height - size[1]) // 2 cropped = img.crop((left, top, left+size[0], top+size[1])) cropped.save(output_path)
-
批量处理不同尺寸:
sizes = [(500, 500), (800, 600), (200, 200)] for size in sizes: folder_name = f"cropped_{size[0]}x{size[1]}" batch_crop_center(input_dir, folder_name, size) -
添加进度条:
from tqdm import tqdm
files = glob.glob(os.path.join(input_folder, '*')) for img_path in tqdm(files, desc="处理中"):
处理逻辑...
选择哪种方法取决于你的需求和环境配置,Python+Pillow 最简单通用,ImageMagick 适合批量命令行操作。