本文目录导读:

- Python + Pillow(最常用)
- Python + OpenCV(支持更多格式)
- Bash脚本(Linux/Mac)
- Windows批处理(需要ImageMagick)
- Node.js脚本
- 安装依赖
- 使用建议
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
使用建议
- 备份原图:批量处理前先备份原始图片
- 测试小样本:先用少量图片测试脚本
- 检查角度:确保旋转角度正确(正值为逆时针)
- 格式兼容性:不同库支持的图片格式可能不同
- 内存考虑:处理大量大尺寸图片时注意内存占用
选择适合你环境的方案即可,Python方案最灵活,命令行方案最简单快捷。