2015-04-15 33 views
3

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

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

但是,如果我注释掉集+保存只是得到(相同的图像上方),我的应用程序无法获取/看属性:

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

所以:因为照片编辑器应用程序可以读取数据,我做错了什么(用写/保存)。另外,如果我重新运行设置+保存在同一个图像文件上,我的应用程序将复制相同的标记!除了简单的设置+保存,还有什么比这个更重要吗?

更新:看来问题是依赖于设备。尽管UserComment似乎不是ExifInterface明确支持的标记之一,但某些设备仍然可以设置标签中的值并获取其值。它适用于Nexus,但不适用于Sony Xperia。请看看我的代码用于获取(查询),并设定(更新)UserComment标签in my other post on Content Providers.

+0

上有没有源代码的一些研究(Java和C),似乎这种行为不应该是可能的。你的完整源代码是什么样的?我已经在发布位中丢失了一个try catch块。 –

回答

相关问题