如何用脚本批量裁剪图片中心?

wen 实用脚本 2

方法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

实用技巧:

  1. 保持原比例:如果不想强制尺寸,可以先等比例缩放:

    如何用脚本批量裁剪图片中心?

    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)
  2. 批量处理不同尺寸

    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)
  3. 添加进度条

    from tqdm import tqdm

files = glob.glob(os.path.join(input_folder, '*')) for img_path in tqdm(files, desc="处理中"):

处理逻辑...


选择哪种方法取决于你的需求和环境配置,Python+Pillow 最简单通用,ImageMagick 适合批量命令行操作。

抱歉,评论功能暂时关闭!