【发布时间】:2012-10-17 22:02:28
【问题描述】:
背景:我正在为信使程序编写相机应用程序。我无法随时将捕获的图像保存到永久磁盘。相机必须支持所有方向。我的实现是熟悉的 Surfaceview 示例。我使用 Display 类来检测方向并相应地旋转相机。在 takePicture jpeg 回调中,我从 byte[] 构造了一个位图,以解决我遇到的一些纵横比问题:Camera API: Cross device issues
问题描述:在某些设备上,在 ROTATION_270(设备顺时针旋转 90 度)拍摄的构造位图颠倒了。到目前为止,它似乎是三星。我只能假设相机可能是以其他方式焊接的,或者有什么影响,但这既不存在也不存在。虽然我可以检查位图是否横向,但我无法从逻辑上检查它是否按尺寸倒置,因此我需要访问 EXIF 数据。
Android 为这个http://developer.android.com/reference/android/media/ExifInterface.html 提供了一个解析器,但不幸的是它有一个接受文件的构造函数......我没有也不想这样做。直观地说,我可以为字节数组编写一个构造函数,但考虑到他们调用本机代码http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.2.1_r1/android/media/ExifInterface.java
,这似乎真的很痛苦我的问题分为两部分:
有谁知道 byte[] 数组是否包含完整的 EXIF jpeg 标头 数据原样或通过 BitmapFactory.decode(...) / 的路径 BitmapFactory.compress(...) 以某种方式添加?
如果此 EXIF 数据存在于字节数组中,我该如何解析 以可靠的方式提供方向信息?
2012 年 10 月 18 日编辑
pcans 下面的回答涉及我问题的第 2 部分。正如我在他的答案下方的 cmets 中指出的那样,如果您想使用该解析器,您必须将源代码合并到您的项目中。该链接 SO 帖子中提到的更改已在此处进行并重新发布:https://github.com/strangecargo/metadata-extractor
注意metadata-extractor 的较新版本无需修改即可直接在 Android 上运行,并可通过 Maven 获得。
但是,对于第 1 部分,当我使用从 takePicture 获得的字节数组运行它时,我从解析器返回 0 个标签。我开始担心字节数组没有我需要的数据。我将继续对此进行研究,但欢迎任何进一步的见解。
【问题讨论】:
-
我已经为 Android 提供了一个 Java 元数据库,它可以为 JPEG、TIFF、PNG、GIF 等图像提取和插入元数据(Exif、XMP、IPTC、ICC_Profile、Photoshop IRB 等)。检查它here
-
关于reading and writing EXIF到android中的图像文件的文章
-
元数据提取器链接需要一个 .com:drewnoakes.com/code/exif