本文目录导读:

- 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方案最灵活,命令行方案最简单快捷。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播