问题描述

iOS手机在竖着拍摄图片后,在手机上看到的图片是正的(相对于观察者),而在某些应用里打开却成了旋转90度的图片。相机拍摄也会存在这个情况,是什么原因导致图片会旋转显示呢?下面我们来具体了解下。

问题原因

Exif(Exchangeable image file format,可交换图像文件格式)是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。Exif可以附加于JPEG、TIFF、RIFF等文件中,为其增加有关数码相机拍摄信息的内容和索引图或图像处理软件的版本信息。而Exif信息中有一个标签和我们今天说的旋转问题就有关系,那就是Orientation。这个标签用于指示摄像机相对于捕获场景的方向,取值有1~8这几种情况。相机可以通过方向传感器自动指示方向,或者允许用户通过菜单开关手动指示方向。
由于Exif信息是可以被任意编辑的,因此只有参考的功能。但是一些应用程序在显示图片时却依赖了这个属性,造成了图片出现旋转、倒置等情况的出现。

解决方法

相机自动旋转

许多较新的数码相机都有一个内置的方向传感器,几乎所有佳能和尼康数码相机都有一个方向传感器。此传感器的输出结果用于在图像文件的元数据中设置EXIF orientation标记,以此反映相机相对于地面的位置。佳能将其传感器称为“智能定位”传感器,它是一个2轴倾斜传感器,允许检测四种可能的方向。
图片自适应旋转显示
虽然你的数码相机可能包含由于相机方向而自动旋转图像的选项,但这几乎总是“虚拟旋转”。设置标志以向显示软件/LCD告知旋转图像的方式,而不是旋转图像内容本身。
由于无损图像旋转是以向计算密集型操作,因此数码相机在拍摄照片后不太可能包含真正的无损旋转。CCD/CMOS传感器硬件设计用于在特定方向上流式传输原始数据(例如先行后列),因此可能很难在相机中加入真正的自动旋转而不会对连续拍摄产生性能影响。

软件进行旋转

虽然目前有无数的软件程序可以显示JPEG图像,但是只有一部分实际上解释了EXIF orientation标志。就像色彩管理一样,许多程序只是显示和存储时的JPEG图像,并完全忽略存储在文件元数据中的任何额外细节。
要做得到不忽略属性,且正常显示。大多数程序一般会选择将图像内容旋转,然后更新orientation标志以反映新的orientation。其值通常为1,同时仍然保留其他元数据。

参考文章

  1. Exif Orientation Tag (Feb 17 2002)
  2. JPEG Rotation and EXIF Orientation

相关文章: