为什么我的照片是歪的?深入理解 EXIF 方向标记
理解 EXIF 八种方向值,排查旋转和镜像照片,并验证浏览器重编码副本;不承诺所有设备兼容或无损修复。
先分清像素和显示指令
照片可以把像素横着存储,再由软件按 EXIF Orientation 指令正向显示;也有文件的像素本身已经正向排列。不要认为所有竖拍照片都需要旋转,也不要把所有歪斜都归因于 EXIF:导出错误或已写入像素的旋转同样可能导致问题。
排查的关键是确认:存储的像素是什么方向,查看软件又应用了什么变换。删除方向标签,不等于旋转像素。
八种值分别表示什么?
下表描述从存储像素到预期显示的变换。对角线的角点以存储图像为准,顺时针按屏幕上的方向理解。
| 值 | 显示变换 |
|---|---|
| 1 | 不变换 |
| 2 | 左右镜像 |
| 3 | 旋转 180 度 |
| 4 | 上下镜像 |
| 5 | 沿左上至右下的对角线转置 |
| 6 | 顺时针旋转 90 度 |
| 7 | 沿右上至左下的对角线反射 |
| 8 | 顺时针旋转 270 度,即逆时针 90 度 |
5 至 8 会交换显示宽高;2、4、5、7 含有镜像,因此“看起来竖直”不代表文字没有左右反转。可对照ExifTool 的方向值定义和 exifr 方向读取接口。读取器有时显示说明文字,而非原始数字。
修改前的排查顺序
- 保留原件,将工作副本放入EXIF 查看器,在全部字段中寻找 Orientation。
- 在发生问题的目标应用里打开同一文件,用文字或不对称物体判断是否镜像。
- 如果能获得存储尺寸,也记录显示尺寸。宽高交换是线索,不是文件损坏的证明。
- 回顾上一步操作:是否删了标签、旋转了像素,或被另一个软件再次应用了方向?
- 若标签缺失或查看器结果为空,不要猜一个方向值。用其他读取器确认;查看器不会展示所有结构或解析错误。
以合成图像为例:存储尺寸为 120×80,Orientation 为 6,则预期显示为 80×120。只删标签可能暴露原本横着的像素;先把像素转正却仍保留旧值 6,则可能又旋转一次。镜像场景也有同样的“双重处理”风险。
两种不同的修复思路
纠正显示指令: 支持方向字段的外部元数据编辑器可以修改错误的 Orientation,而不主动重新编码像素。但前提是已经知道像素的正确解释,且目标应用遵守标签。本站的JPEG EXIF 编辑器没有 Orientation 控件,不要用日期、描述或 GPS 字段代替方向修复。
规范化显示后的图像: 把正确的变换应用到图像数据,再删除旧指令或一致地设为正常。普通图像编辑器导出 JPEG 可能重新压缩;专门的 JPEG 无损变换也有自身限制,不能把“旋转”一概当作无损操作。
浏览器移除器实际做了什么?
EXIF 移除器通过浏览器图像解码器加载文件,按解码后的自然尺寸绘制到 canvas,再输出新文件。方向处理依赖浏览器解码器,没有独立的“自动定向”开关,也没有手写的八种方向变换流程。
项目记录的合成案例中已检查显示方向保持,包括一个 Orientation 为 6 的 JPEG 冒烟测试。这不是对所有浏览器、操作系统、格式或真实相机文件的保证。合成元数据实验室用于已知输入的对照,不是全平台兼容认证。
重新编码也有代价:JPEG、WebP 即使选最高质量仍可能有有损压缩变化。PNG 编码无损,但浏览器解码和色彩转换不保证源像素完全一致。HTML canvas 序列化规范描述的是生成新的位图文件,而非原地修改元数据。
下载后再次验证
重新打开下载文件,不要只相信处理预览。检查方向字段、正向显示、文字镜像、尺寸和颜色,并在原先出错的目标应用里再试一次。若像素本身仍然歪斜,标签为正常或没有标签都不能说明修复成功。
照片转正也不代表隐私安全,分享前仍应检查 GPS 和身份线索。继续阅读EXIF 字段判读及PNG 与 JPEG 元数据比较,再选择清理流程。
相关文章
方向标记 · exif · 疑难解答