我正在编写一个Android应用,可以从设备的存储中读取照片并按方向过滤它们。
使用Android的默认相机应用程序(Android 4.4 KitKat)拍摄照片时,照片的方向不会保存(照片详细信息中的方向始终为0)。其他一些相机应用确实可以保存方向。
这是默认相机应用的错误/功能吗?
当相机应用程序在Exif标题中没有设置方向时,有没有办法在拍摄照片时知道设备是否倒置?
答案 0 :(得分:2)
我刚试过,我明白你的意思了。即使在全分辨率下,我的Nexus 4(带KitKat)似乎也使用实际的图像旋转而不是EXIF方向数据。
我想说这是一个功能,而不是一个bug。 EXIF旋转数据通常用于表示"我将此照片拍摄为肖像,但图像数据是横向的,因为我是微不足道的,低内存的移动设备,以及我的传感器的方式捕获它,这节省了我不得不使用大量内存和CPU旋转图像数据。"
(虽然您可以在设备上查看旋转的图像,但请记住,屏幕上的图像分辨率要低得多 - 例如,Nexus 4上相当普通的相机的像素数大约是十倍作为Nexus 4的屏幕,您只需在内存中保留一个微小旋转的图像副本即可将其放在显示屏上。制作全尺寸图像的旋转副本要贵得多,并且&# 39;为什么许多手机在原始拍摄的图像旁边使用EXIF旋转数据,无论相机产生什么样的原始方向。)
换句话说,EXIF方向值用于校正 - 如果图像数据的存储方式与相机拍摄图像的方向不同,则只需要进行校正。您无法依靠它来告诉您相机的操作方式。一些设备将足够聪明,只能将图像数据存储在正确的方向(可能通过某种硬件功能,使旋转相对便宜。)
相同的照片应用程序甚至可能针对不同的分辨率采用不同的方法,使用EXIF数据进行高分辨率旋转,但旋转图像数据本身(并清除EXIF方向标记)以获得缩放图像(&#34)嘿,如果我还是要扩展数据,我也可以把它放在正确的方向上......")