想知道怎么用脚本批量裁剪图片为统一尺寸吗?

wen 实用脚本 47

本文目录导读:

想知道怎么用脚本批量裁剪图片为统一尺寸吗?

  1. 方案一:使用Python(最灵活、跨平台)
  2. 方案二:使用ImageMagick(命令行之王)
  3. 方案三:使用Photoshop动作(Windows/macOS图形化)
  4. 方案四:使用GraphicsMagick(轻量版ImageMagick)
  5. 常见问题处理
  6. 推荐选择

当然可以!批量裁剪图片为统一尺寸是常见的图像处理需求,使用脚本可以高效完成,下面我为你介绍几种主流方法,包括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,可以录制动作后批量处理。

  1. 打开Photoshop,打开一张图片
  2. 窗口 → 动作(Alt+F9)
  3. 点击新建动作,命名为“批量裁剪800x600”
  4. 点击录制,然后进行以下操作:
    • 选择裁剪工具,设置宽度800px、高度600px、分辨率300px/英寸
    • 裁剪图片到合适区域
    • 文件 → 存储(或存储为Web所用格式)
    • 关闭图片
  5. 点击停止录制
  6. 文件 → 自动 → 批处理
    • 选择刚刚录制的动作
    • 源:选择图片文件夹
    • 目标:选择输出文件夹
    • 勾选“覆盖动作中的‘打开’命令”和“覆盖动作中的‘存储为’命令”

使用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操作

你可以根据需求选择最适合的方法,如果需要更复杂的逻辑(如按百分比裁剪、检测人脸裁剪等),可以告诉我具体需求,我可以帮你定制脚本。

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