![无法旋转简单的 .jpg 图像](https://linux22.com/image/1599820/%E6%97%A0%E6%B3%95%E6%97%8B%E8%BD%AC%E7%AE%80%E5%8D%95%E7%9A%84%20.jpg%20%E5%9B%BE%E5%83%8F.png)
我的摩托罗拉 Moto 手机拍摄的某些图像(许多型号都存在此问题,例如 Moto One、Moto Z2 Play 等)顺时针旋转了 90 度。我无法使用 IrfanView 旋转它们,尽管过去 15 年来我使用它旋转了数万张图片。
我像往常一样旋转图像,即
- 在 IrfanView 中打开它们,
- (图像在视口中顺时针旋转 90 度),
- 按l一次(向左旋转),
- (图像在视口中正确旋转),
- 按Ctrl+s保存,
- 选择一个新名称(以避免可能的访问权限问题),
- 在 IrfanView 中再次打开新保存的文件,
- (图像在视口中再次顺时针旋转 90 度)。
我可以一遍又一遍地重复上述步骤,也可以选择相同的文件名并覆盖原始文件。但一切都徒劳无功——图像在文件中仍然旋转不正确,只有在视口中旋转正确。
让事情变得更加奇怪的是,我做了以下观察:
- 图像在 IrfanView 中总是旋转(从文件读取时),
- 图像在 Total Commander 的查看器中总是旋转(按下F3文件),
- 图像在 Microsoft Paint 中始终正确显示,
- 图像在附加到电子邮件时会旋转(收件人确认,图像已旋转),
- 当图像被放入 Chrome、Firefox 和 Opera 浏览器的新标签页时,图像会旋转,
- 当图像放入 Internet Explorer 的新选项卡时,它始终可以正确显示。
我无法检查 Microsoft Edge,但似乎图像在任何与 Microsoft 相关的软件中始终正确显示,并且在任何第三方软件中始终旋转。
(旋转了嗎? 下面是从磁盘上的同一个文件读取的同一幅图像的示例,在 Chrome 和 IrfanView 中旋转显示,并在 Microsoft Paint 和 Internet Explorer 中正确显示)
是否存在两个不同的 .jpg 读取库/算法,一个由微软使用,另一个(或多个)由第三方软件使用,其中哪一个可以导致图像旋转显示?
答案1
大多数相机都会添加EXIF数据到图像,其中可能包含很多关于图像的信息 - 相机型号、曝光设置、缩放、日期、时间、位置,以及对你的问题来说很重要的方向相机的
一些图像查看器和编辑软件会使用此方向信息来以正确的旋转方式呈现照片,但绝不是全部......
- 一些图像编辑软件会重写只是EXIF 数据来解释您请求的任何旋转,而不会真正改变图像……通常是面向照片的软件。这种旋转可能只有在遵循 EXIF 数据的软件中才能正确呈现
- 其他图像编辑软件实际上会重置 EXIF 数据并直接操作图像数据 - 此旋转应该在所有查看器中可见。
- MS Paint 将观察方向数据 - 但在旋转和保存后将保留 EXIF 方向数据原样,同时处理图像数据......我认为这有点问题。
- 非常基本的图像编辑软件将删除 EXIF 数据并保存只是图像数据——可以通过全选 → 复制 → 新建 → 粘贴来模拟。
- 从您的问题来看,我认为 IrfanView 只是为了演示而暂时旋转图像 - 即:它不会改变 EXIF 数据,也不会改变图像数据。
如果您在旋转时遇到问题并且需要确定,那么我建议您在编辑器中打开图像,选择整个画布,然后将其复制并粘贴到新图像中。获得新图像后(不是“照片“本身没有 EXIF 数据”),执行任何所需的旋转并保存。
在某些情况下,方向可能会被错误记录 - 例如,当几乎垂直向下或向上拍摄照片时,相机可能会选错方向 - 想象一下水平仪中的气泡……使用水平镜头时方向很明显,使用垂直镜头时方向则不明显。