android - 获取使用 Android 默认相机拍摄的照片的设备方向

标签 android android-camera exif

我正在编写一个 Android 应用程序,该应用程序从设备存储中读取照片并按方向过滤它们。

使用 Android 的默认相机应用程序 (Android 4.4 KitKat) 拍照时,不会保存照片的方向(照片详细信息中的方向始终为 0)。其他一些相机应用程序确实会保存方向。

这是默认相机应用程序的错误/功能吗?

当相机应用程序未在 Exif 标题中设置方向时,有没有办法知道拍摄照片时设备是否颠倒?

最佳答案

我刚刚尝试过,我明白你的意思。即使在全分辨率下,我的 Nexus 4(带有 KitKat)似乎也使用实际的图像旋转而不是 EXIF 方向数据。

我想说这是一个功能,而不是一个错误。 EXIF 旋转数据通常用于表示“我将这张照片拍摄为肖像,但图像数据是风景,因为我是一个微不足道的低内存移动设备,这就是我的传感器捕获它的方式,这使我不必使用大量内存和 CPU 来旋转图像数据。”

(虽然您可以在设备上查看旋转后的图像,但请记住,屏幕上的图像分辨率会低得多 - 例如,Nexus 4 上相当普通的摄像头的像素数大约是该摄像头的十倍与 Nexus 4 的屏幕一样,因此您只需在内存中保留图像的微小旋转副本即可将其显示在显示屏上。制作全尺寸图像的旋转副本要昂贵得多,这就是为什么很多手机将 EXIF 旋转数据与相机生成的任何原始方向的原始捕获图像一起使用。)

换句话来说,EXIF 方向值用于校正 - 仅当图像数据的存储方式与相机拍摄照片的方向不同时才需要它。你不能依赖它来告诉你相机是如何握持的。有些设备足够聪明,可以首先以正确的方向存储图像数据(可能通过某种使旋转相对便宜的硬件功能。)

同一个照片应用程序甚至可能对不同的分辨率采取不同的方法,使用 EXIF 数据来实现高分辨率,而旋转的成本会很高,但旋转图像数据本身(并清除 EXIF 方向标志)来缩放图像(“嘿,如果我无论如何都要缩放数据,我也可能会将其放在正确的方向......”)

关于android - 获取使用 Android 默认相机拍摄的照片的设备方向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24935790/

相关文章:

java - Android canRead() 返回 false

android - 从 SurfaceView 捕获照片

java - 谷歌探戈/opencv Android 相机应用程序崩溃/挂起

python - 如何在 Python 中将自定义信息保存到 PNG 图像文件?

php - exif_imagetype 在 Windows 中不起作用

c# - 如何使用 Protocol-buffer 在 Java 中反序列化文件?

javascript - 使用跨域页面在 chrome 上运行 phonegap 应用程序

java - 删除某些项目后 ListView 刷新

java - 在 Android 中切换自定义相机正面和背面

java - 如何从图像中获取 EXIF 或元数据?