在Android中将EXIF标签(属性)写入并保存到JPEG图像

时间:2015-04-15 11:51:59

标签: android android-imageview exif

我设法使用ExifInterface从手机上的JPEG中读取EXIF标签/属性(元数据),我显然也可以设置属性和保存属性。奇怪的是,如果我在图像文件上设置+保存,我的应用程序可以获取属性并显示它。我还可以在另一个应用程序(Google Play上的照片编辑器)中验证EXIF数据确实已写入。

ExifInterface exif = new ExifInterface(path_to_image); 
String x = exif.getAttribute("UserComment"); // here, x is always null...

exif.setAttribute("UserComment", "testtest");
exif.saveAttributes();

x = exif.getAttribute("UserComment");  // x = "testtest"

现在,EXIF保存为JPEG文件:see screenshot of my app。 照片编辑器应用程序see screenshot of that也验证了这一点。

但是,如果我注释掉set + save并且只是得到(与上面相同的图像),我的应用程序无法获取/看到属性:

ExifInterface exif = new ExifInterface(path_to_image); 
String x = exif.getAttribute("UserComment");  // x = null (although we know it isn't)

所以:由于照片编辑器应用程序可以读取数据,我做错了(写入/保存)。此外,如果我在同一图像文件上重新运行set + save,我的应用程序会复制相同的标记!还有什么比简单设置+保存更多,然后得到?

  

更新:问题似乎与设备有关。虽然UserComment似乎不是ExifInterface明确支持的标记之一,但某些设备仍然能够设置并获取标记中的值。它适用于Nexus,但不适用于我的Sony Xperia。请查看我的代码以获取(查询)和设置(更新)UserComment代码in my other post on Content Providers.

2 个答案:

答案 0 :(得分:2)

解决方案是使用ExifInterface,似乎。我将尝试https://github.com/sephiroth74/Android-Exif-Extended

更新:更好的是,使用Apache Sanselan,https://commons.apache.org/proper/commons-imaging/javadocs/api-release/org/apache/sanselan/Sanselan.html

答案 1 :(得分:0)

您的代码适合我。我认为你有一些简单的错误,比如你在你正在修改的文件和你在照片编辑器中查看的文件之间混淆了。