当前位置: 首页 > 面试题库 >

从图片回调读取android jpeg EXIF元数据

贺栋
2023-03-14
问题内容

背景:我正在为通讯程序编写一个相机应用程序。我无法随时将捕获的图像保存到永久磁盘。相机必须支持所有方向。我的实现是使用熟悉的Surfaceview示例。我使用Display类来检测方向并相应地旋转相机。在takePicture
jpeg回调中,我从byte[]构造了一个位图,以解决我遇到的某些长宽比问题

问题描述:在某些设备上,以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

我的问题分为两个部分:

  1. 有谁知道byte []数组是否按原样包含完整的EXIF jpeg标头数据,或者通过BitmapFactory.decode(…)/ BitmapFactory.compress(…)的路径是否以某种方式添加了它?

  2. 如果此EXIF数据在字节数组中存在,如何可靠地解析方向信息?

编辑10/18/12

pcans下面的回答涉及我的问题的第二部分。
正如我在他的答案下方的评论中所指出的那样,如果要使用该解析器,则必须将源合并到项目中。该链接的SO帖子中提到的更改已完成并在此处重新发布:https : //github.com/strangecargo/metadata-extractor

注意元数据提取器的较新版本无需修改即可直接在Android上运行,并且可以通过Maven获得。

但是,关于第1部分,当我使用从takePicture获得的字节数组运行解析器时,我从解析器中获取了0个标签。我开始担心字节数组没有我需要的数据。我将继续对此进行调查,但欢迎您提供任何进一步的见解。


问题答案:

坏消息:

遗憾的是,Android Api不允许您从读取exif数据Stream,而只能从读取File
ExifInterface没有带的构造函数InputStream。因此,您必须自己解析jpeg内容。

消息

为此,API在纯Java中存在。您可以使用以下代码:https :
//drewnoakes.com/code/exif/
它是开放源代码,在Apache License
2下发布,可以作为Maven软件包使用。

有一个带有的构造函数InputStreampublic ExifReader(java.io.InputStream is)

你可以建立一个InputStream由您支持byte[]使用ByteArrayInputStream这样的:

InputStream is = new ByteArrayInputStream(decodedBytes);


 类似资料:
  • 读取文件已支持 windows 系统,版本号大于等于 1.3.4.1; 扩展版本大于等于 1.2.7; PECL 安装时将会提示是否开启读取功能,请键入 yes; 优势 最大内存 == 最大单元格数据体积 该模式可满足 xlsx 大文件读取 函数原型 nextCellCallback(callable $callback, string $sheetName = NULL): void 回调函数

  • 我正在开发我的第一个WP插件,我被卡住了。 我在内容编辑器下面的帖子页面上创建了一个定制字段(字段1)。它保存正确。:) 添加媒体时,我在媒体库弹出窗口中创建了一个自定义字段(字段2)。它保存正确。:) 我想做的是使用字段1中的值作为字段2的默认值。 我怀疑问题出在attachment_fields_to_edit回调函数中。 我认为$post现在指的是实际的“文件附件帖子”,而不是帖子本身,所以

  • 我目前正在编写一个应用程序来读取TIFF文件,然后执行一些压缩算法。我已经成功地做到了这一点...但是现在,我想读取TIFF图像的元数据,但似乎找不到正确的方法。 我应该使用什么库和函数?

  • 在UserProfileModule中再添加一个读取用户头像的方法 @Ok("raw:jpg") @At("/avatar") @GET public Object readAvatar(@Attr(scope=Scope.SESSION, value="me")int userId, HttpServletRequest req) throws SQLExcept

  • 如何从Python中的TIFF图像中读取元数据(如坐标)?我尝试了来自PIL的,但收到消息: AttributeError:“TiffImageFile”对象没有属性“\u getexif” 有可能用PIL得到它吗?

  • 本文向大家介绍C#从数据库读取图片并保存的两种方法,包括了C#从数据库读取图片并保存的两种方法的使用技巧和注意事项,需要的朋友参考一下 方式一: 数据库用的是SQL 2008,数据表中存放的是图片的二进制数据,现在把图片以一种图片格式(如.jpg)导出,然后存放于指定的文件夹中,实现方式如下: 方式二: 是windowform程序,数据库已经建好,图像以二进制形式存放在数据库的image表中,我想