【问题标题】:Writing and saving EXIF tags (attributes) to JPEG image in Android在 Android 中将 EXIF 标签(属性)写入和保存到 JPEG 图像
【发布时间】:2015-04-15 11:51:58
【问题描述】:

我已经设法使用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'es,但不适用于我的 Sony Xperia。请查看我的代码以获取(查询)和设置(更新)UserComment 标签in my other post on Content Providers.

【问题讨论】:

  • 对源代码(java和c)做了一些研究,似乎这种行为是不可能的。您的完整源代码是什么样的?我已经在发布的位中丢失了一个 try catch 块。

标签: android android-imageview exif


【解决方案1】:

解决方案是使用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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-07-23
      • 2015-02-28
      • 2015-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-08
      相关资源
      最近更新 更多