我试图在自定义相机应用中将lat-long和其他数据写入jpeg的Exif标头。通常,android会自动使用光圈,ISO,快门速度等数据填充标题。但是,当我手动添加创建ExifInterface
实例时,请使用SetAttributes()
设置GPS位置,然后调用{{1} };所有其他相机数据消失。
这应该发生吗?如何在不覆盖其他所有内容的情况下添加标记?
我在其他地方看到了创建两个ExifInterfaces的示例,一个旧的(从图片中)和一个新的,并将每个填充的值从旧的复制到新的以及任何其他数据。然而,这是令人烦恼和冗长的。我想找到一个更好的解决方案。
这是我的代码:
SaveAttributes()
由于
答案 0 :(得分:0)
从我已经看过的文档来看,这不应该发生。 http://developer.android.com/reference/android/media/ExifInterface.html
public void saveAttributes ()
Added in API level 5
Save the tag data into the JPEG file. This is expensive because it involves copying all the JPG data from one file to another and deleting the old file and renaming the other. It's best to use setAttribute(String, String) to set all attributes to write and make a single call rather than multiple calls for each attribute.
Throws
IOException
它清楚地表明它正在复制所有数据,包括你说的消失的东西。你可以发布你正在测试它的内容吗?如果您使用的是Android Studio,则可以尝试使用File - >无效缓存/重新启动 - >无效并重新启动。
或者我找到了关于丢失数据的类似问题的答案: https://stackoverflow.com/a/13784057/3585278
正如其他人指出的那样,您必须从中复制EXIF数据 原始图像到最终调整大小的图像。 Sanselan Android 库通常是最好的。取决于Android OS版本, ExifInterface有时会破坏EXIF数据。除此之外 ExifInterface还处理有限数量的Exif标记 - 即 只有它"知道的标签"关于。另一方面,Sanselan会 保留所有EXIF标签和标记说明。 这是一篇博客文章,展示了如何使用Sanselan复制图像数据: http://bricolsoftconsulting.com/copying-exif-metadata-using-sanselan/ 顺便说一下,在Android上我也倾向于旋转图像并删除Orientation EXIF标签。例如,在Android 4.03的Nexus S上 相机正在EXIF元数据中设置方向标记,但是 webview忽略了该信息并错误地显示了图像。 遗憾的是,旋转实际图像数据并删除EXIF orientation标签是让每个程序显示图像的唯一方法 正确。
我希望这会有所帮助。