脚本如何批量旋转图片角度

wen 实用脚本 4

本文目录导读:

脚本如何批量旋转图片角度

  1. Python + Pillow(最常用)
  2. Python + OpenCV(支持更多格式)
  3. Bash脚本(Linux/Mac)
  4. Windows批处理(需要ImageMagick)
  5. Node.js脚本
  6. 安装依赖
  7. 使用建议

Python + Pillow(最常用)

import os
from PIL import Image
def batch_rotate_images(folder_path, angle=90, output_folder=None):
    """
    批量旋转图片
    :param folder_path: 图片文件夹路径
    :param angle: 旋转角度(90, 180, 270等)
    :param output_folder: 输出文件夹,None则覆盖原图
    """
    if output_folder:
        os.makedirs(output_folder, exist_ok=True)
    for filename in os.listdir(folder_path):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp')):
            img_path = os.path.join(folder_path, filename)
            try:
                img = Image.open(img_path)
                rotated = img.rotate(angle, expand=True)
                if output_folder:
                    save_path = os.path.join(output_folder, filename)
                else:
                    save_path = img_path
                rotated.save(save_path)
                print(f"已旋转: {filename}")
            except Exception as e:
                print(f"处理 {filename} 时出错: {e}")
# 使用示例
batch_rotate_images("./images", angle=90, output_folder="./rotated_images")

Python + OpenCV(支持更多格式)

import cv2
import os
def batch_rotate_opencv(folder_path, angle=90):
    """
    使用OpenCV批量旋转图片
    """
    for filename in os.listdir(folder_path):
        if filename.lower().endswith(('.png', '.jpg', '.jpeg', '.tiff')):
            img_path = os.path.join(folder_path, filename)
            img = cv2.imread(img_path)
            if img is None:
                print(f"无法读取: {filename}")
                continue
            # 获取图像中心
            h, w = img.shape[:2]
            center = (w // 2, h // 2)
            # 旋转矩阵
            M = cv2.getRotationMatrix2D(center, angle, 1.0)
            rotated = cv2.warpAffine(img, M, (w, h))
            # 保存
            output_path = os.path.join(folder_path, f"rotated_{filename}")
            cv2.imwrite(output_path, rotated)
            print(f"已处理: {filename}")
batch_rotate_opencv("./images", angle=90)

Bash脚本(Linux/Mac)

#!/bin/bash
# 批量旋转图片(需要安装ImageMagick)
source_folder="./images"
target_folder="./rotated"
angle=90
# 创建输出文件夹
mkdir -p "$target_folder"
# 遍历图片文件
for file in "$source_folder"/*.{jpg,jpeg,png,gif,bmp}; do
    if [ -f "$file" ]; then
        filename=$(basename "$file")
        echo "正在处理: $filename"
        convert "$file" -rotate "$angle" "$target_folder/$filename"
    fi
done
echo "全部处理完成!"

Windows批处理(需要ImageMagick)

@echo off
setlocal enabledelayedexpansion
set source_folder=C:\images
set output_folder=C:\rotated
set angle=90
if not exist "%output_folder%" mkdir "%output_folder%"
for %%f in ("%source_folder%\*.jpg" "%source_folder%\*.png" "%source_folder%\*.jpeg") do (
    echo 正在处理: %%~nxf
    magick convert "%%f" -rotate %angle% "%output_folder%\%%~nxf"
)
echo 完成!
pause

Node.js脚本

const sharp = require('sharp');
const fs = require('fs');
const path = require('path');
async function batchRotateImages(folderPath, angle = 90) {
    const outputFolder = path.join(folderPath, 'rotated');
    if (!fs.existsSync(outputFolder)) {
        fs.mkdirSync(outputFolder);
    }
    const files = fs.readdirSync(folderPath);
    for (const file of files) {
        const ext = path.extname(file).toLowerCase();
        if (['.jpg', '.jpeg', '.png', '.webp'].includes(ext)) {
            try {
                await sharp(path.join(folderPath, file))
                    .rotate(angle)
                    .toFile(path.join(outputFolder, file));
                console.log(`已旋转: ${file}`);
            } catch (error) {
                console.error(`处理 ${file} 失败:`, error);
            }
        }
    }
}
// 使用示例
batchRotateImages('./images', 90).then(() => {
    console.log('全部完成!');
});

安装依赖

Python

pip install Pillow opencv-python

Node.js

npm install sharp

ImageMagick(命令行)

  • Windows: 下载安装 ImageMagick
  • Mac: brew install imagemagick
  • Linux: sudo apt-get install imagemagick

使用建议

  1. 备份原图:批量处理前先备份原始图片
  2. 测试小样本:先用少量图片测试脚本
  3. 检查角度:确保旋转角度正确(正值为逆时针)
  4. 格式兼容性:不同库支持的图片格式可能不同
  5. 内存考虑:处理大量大尺寸图片时注意内存占用

选择适合你环境的方案即可,Python方案最灵活,命令行方案最简单快捷。

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