图片旋转/翻转:在线修改方向
手机拍照方向错误、扫描的文档歪斜、需要镜像图片——在线旋转翻转工具一键解决。本文详解图片方向调整。
52tool 旋转翻转工具
工具地址:图片旋转
功能
- 90/180/270 度旋转
- 任意角度旋转
- 水平翻转(左右镜像)
- 垂直翻转(上下镜像)
- 批量处理
- 浏览器端处理
实战 1:90 度旋转
原图:横向 4000x3000
操作:顺时针 90 度
结果:竖向 3000x4000
实战 2:水平翻转
原图:人物向左看
操作:水平翻转
结果:人物向右看
实战 3:自定义角度
原图:扫描歪斜
操作:顺时针 3 度
结果:正向
为什么需要旋转?
原因 1:手机拍照方向错误
手机拍照时 EXIF Orientation 字段记录方向,但部分浏览器/平台不解析,显示方向错误。
原因 2:扫描方向不对
扫描的文档可能 90 度或 180 度倒置。
原因 3:照片歪斜
拍摄时手持不稳,照片微微歪斜,需要 ±1-5 度旋转校正。
原因 4:需要镜像
- 文字反向(如印在玻璃上的字)
- 镜像自拍效果
- 特殊设计需求
原因 5:视频封面方向
视频封面方向与播放方向不一致,需要旋转。
各旋转方式
90 度顺时针旋转
原图:[→]
结果:[↓](90 度顺时针)
宽高互换。
180 度旋转
原图:[→]
结果:[←](完全倒置)
宽高不变。
270 度顺时针旋转
原图:[→]
结果:[↑]
宽高互换。等同于 90 度逆时针。
水平翻转
原图:[A B]
结果:[B A]
左右镜像。
垂直翻转
原图:[A]
[B]
结果:[B]
[A]
上下镜像。
自定义角度旋转
原图:[→](歪斜 5 度)
操作:顺时针 -5 度
结果:[→](水平)
旋转 vs EXIF Orientation
EXIF Orientation
EXIF 中的 Orientation 字段定义图像显示方向:
| 值 | 含义 |
| 1 | 正常(默认) |
| 2 | 水平翻转 |
| 3 | 180 度旋转 |
| 4 | 垂直翻转 |
| 5 | 顺时针 90 度 + 水平翻转 |
| 6 | 顺时针 90 度 |
| 7 | 顺时针 90 度 + 垂直翻转 |
| 8 | 逆时针 90 度 |
解决方案
#### 方案 1:修改 EXIF Orientation
只改元数据,不改图像数据,速度快:
# 用 PIL 修改 EXIF
img = Image.open('input.jpg')
img.save('output.jpg', exif=img.getexif())
但部分平台不解析 EXIF,仍显示错误。
#### 方案 2:实际旋转图像
改图像数据本身,兼容性最好:
from PIL import Image
img = Image.open('input.jpg')
img_rotated = img.rotate(-90, expand=True) # 顺时针 90 度
img_rotated.save('output.jpg')
推荐方案
实际旋转图像最稳。修改 EXIF 在某些平台无效。
编程实现
JavaScript(Canvas)
function rotateImage(image, degrees) {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
if (degrees === 90 || degrees === 270) {
canvas.width = image.height;
canvas.height = image.width;
} else {
canvas.width = image.width;
canvas.height = image.height;
}
ctx.translate(canvas.width / 2, canvas.height / 2);
ctx.rotate(degrees * Math.PI / 180);
ctx.drawImage(image, -image.width / 2, -image.height / 2);
return canvas.toDataURL('image/jpeg', 0.9);
}
function flipHorizontal(image) {
const canvas = document.createElement('canvas');
canvas.width = image.width;
canvas.height = image.height;
const ctx = canvas.getContext('2d');
ctx.translate(canvas.width, 0);
ctx.scale(-1, 1);
ctx.drawImage(image, 0, 0);
return canvas.toDataURL('image/jpeg', 0.9);
}
Python(Pillow)
from PIL import Image
img = Image.open('input.jpg')
# 90 度逆时针旋转
rotated = img.rotate(90, expand=True)
rotated.save('output_90.jpg')
# 180 度
rotated_180 = img.rotate(180, expand=True)
rotated_180.save('output_180.jpg')
# 270 度(90 度顺时针)
rotated_270 = img.rotate(-90, expand=True)
rotated_270.save('output_270.jpg')
# 水平翻转
flipped_h = img.transpose(Image.FLIP_LEFT_RIGHT)
flipped_h.save('output_flip_h.jpg')
# 垂直翻转
flipped_v = img.transpose(Image.FLIP_TOP_BOTTOM)
flipped_v.save('output_flip_v.jpg')
# 自定义角度(背景白色)
rotated_custom = img.rotate(5, expand=True, fillcolor='white')
rotated_custom.save('output_custom.jpg')
命令行(ImageMagick)
# 90 度顺时针
convert input.jpg -rotate 90 output.jpg
# 180 度
convert input.jpg -rotate 180 output.jpg
# 270 度(或 -90)
convert input.jpg -rotate 270 output.jpg
# 水平翻转
convert input.jpg -flop output.jpg
# 垂直翻转
convert input.jpg -flip output.jpg
# 自动旋转(按 EXIF Orientation)
convert input.jpg -auto-orient output.jpg
实战场景
场景 1:手机照片方向错误
iPhone 拍的照片在 Windows 上显示横向:
- 打开 52tool 图片旋转
- 上传照片
- 90 度旋转(方向判断后选顺时针或逆时针)
- 下载
场景 2:扫描文档歪斜
扫描的文档歪了 3 度:
- 上传图片
- 自定义角度:-3 度
- 下载
场景 3:批量旋转
100 张照片全部需要 90 度旋转:
- 选"批量处理"
- 拖入 20 张(每次上限 20)
- 操作:90 度顺时针
- 一键处理
- 下载所有结果
场景 4:镜像文字
照片中玻璃上的字是反的:
- 上传图片
- 水平翻转
- 文字变正
场景 5:制作镜像效果
风景照镜像后拼成全景:
原图 + 镜像 = 全景效果
场景 6:视频封面校正
视频封面方向不对:
- 截取封面
- 旋转校正
- 重新设置
自定义角度旋转
旋转角度计算
顺时针:正角度
逆时针:负角度
旋转后空白填充
自定义角度旋转后图像会出现空白角:
原图:长方形
旋转 30 度后:长方形 + 空白角
填充选项:
- 白色背景
- 黑色背景
- 透明(PNG)
- 自动扩展画布
抠图旋转
1. 抠出主体(去背景)
2. 旋转主体
3. 合成新背景
需要图像处理软件。
旋转质量
90/180/270 度
无损旋转,每个像素对应原图。质量完美。
自定义角度
有损旋转,需要插值:
- 最近邻:快但锯齿明显
- 双线性:中等画质
- 双三次:慢但画质好
- Lanczos:最慢但画质最好
52tool 默认双三次。
与其他工具配合
旋转 + 裁剪
工具:图片裁剪
旋转后裁掉空白角,得到完美矩形。
旋转 + 压缩
工具:图片压缩
旋转后压缩,减小体积。
旋转 + 缩放
工具:图片缩放
旋转后缩到目标尺寸。
旋转 + EXIF 修正
工具:EXIF 查看
旋转后更新 EXIF Orientation,避免重复旋转。
进阶技巧
技巧 1:批量自动旋转
根据 EXIF 自动旋转:
from PIL import Image, ImageOps
img = Image.open('input.jpg')
img = ImageOps.exif_transpose(img) # 按 EXIF 自动旋转
img.save('output.jpg')
技巧 2:透视校正
照片有透视变形(如翻拍文档有梯形畸变):
1. 检测四个角点
2. 透视变换到矩形
需要 OpenCV 等专业工具。
技巧 3:拼接全景
多张重叠照片拼成全景:
1. 特征点匹配
2. 计算变换矩阵
3. 拼接
需要专业拼接软件(如 Hugin)。
技巧 4:旋转 + 文字
旋转后文字方向不变:
# 旋转图片
rotated = img.rotate(45)
# 在新画布上添加正向文字
draw.text((x, y), "Hello", font=font)
技巧 5:批量改名
旋转后的文件加后缀:
原:photo.jpg
旋转后:photo_rotated.jpg
便于区分。
常见问题
Q: 旋转后图片体积变大了?
A: JPG 重新编码可能略微增加体积。用 90% 质量保存即可减小。
Q: 旋转后图片模糊?
A: 1) 自定义角度旋转会模糊(插值导致);2) 90/180/270 度无损旋转不模糊。
Q: iPhone 拍的照片在 Windows 显示横向?
A: EXIF Orientation 不被解析。解决:1) 用工具实际旋转;2) 或用 ImageMagick -auto-orient 自动按 EXIF 旋转。
Q: 旋转后透明背景变白色?
A: JPG 不支持透明,旋转后的空白区域填白色。需要透明输出 PNG 格式。
Q: 批量旋转有限制吗?
A: 52tool 一次最多 20 张,浏览器端处理。更多张数分批。
Q: 工具会泄露我的图片吗?
A: 52tool 旋转工具在浏览器端运行,原图不上传服务器。适合处理私人照片等敏感图片。
常见问题解答
Q: 怎么把照片从横向旋转到竖向?
A: 1) 打开 52tool 图片旋转;2) 上传照片;3) 选择"90 度顺时针"或"90 度逆时针";4) 下载。具体方向需要试一下。
Q: 怎么把照片水平翻转?
A: 同工具,选择"水平翻转"或"左右镜像"。垂直翻转是上下镜像。
Q: 旋转能撤销吗?
A: 在线工具撤销可以,保存后无法还原。建议保留原图。
Q: 怎么批量旋转多张照片?
A: 1) 选"批量处理";2) 拖入多张;3) 选旋转方向;4) 一键处理;5) 下载。
Q: 旋转后宽高对调怎么办?
A: 这是正常的。90/270 度旋转后宽高互换。180 度不变。
Q: 怎么校正歪斜的扫描件?
A: 1) 上传扫描件;2) 选"自定义角度";3) 输入校正角度(如 -3 度);4) 预览效果;5) 调整到正向;6) 下载。
总结
图片旋转翻转是基础但高频的图像处理:
- 在线旋转 → 52tool 图片旋转
- 批量处理 → 同工具批量模式
- 配合裁剪 → 图片裁剪
- 配合压缩 → 图片压缩
记住:90/180/270 度无损旋转,自定义角度有损,iPhone 照片在 Windows 显示错误是 EXIF 问题。