7

目前我正在尝试将自定义 exif 标签/数据添加到相册中的图像文件。

我能够修改ExifInterface类中定义的现有标签

但是,我想存储自定义数据,例如我的应用用户的用户 ID,但似乎我无法创建自定义 exif 属性

我找到的最接近的解决方案是here,但不起作用,

4

3 回答 3

7

尝试使用标签保存 Exif 数据:

“用户评论”

代码:

String mString = "Your message here";     
ExifInterface exif = new ExifInterface(path_of_your_jpeg_file);
exif.setAttribute("UserComment", mString);
exif.saveAttributes();

你可以把你想要的任何东西(作为字符串)放在那里,然后简单地解析字符串。我希望我们可以创建和命名我们自己的 exif 标签,但事实是我们做不到。所以这是我想出的最好的解决方案。

于 2013-04-26T21:28:47.283 回答
3

使用标签保存 Exif 数据"ImageDescription"

https://developer.android.com/reference/android/media/ExifInterface.html

代码

try {
  String imageDescription = "Your image description";     
  ExifInterface exif = new ExifInterface(file_name_of_jpeg);
  exif.setAttribute("ImageDescription", imageDescription);
  exif.saveAttributes();
} catch (IOException e) {
  // handle the error
}
于 2017-01-18T09:17:37.253 回答
2

如果您不能使用现有的 exif 属性(例如“UserComment”或“ImageDescription”),那么您在使用ExifInterface.

Exif 属性表示为二进制标记号,其值以二进制数据格式编码。 ExifInterface类从程序员那里抽象出来,并提供了一个setAttribute方法,其中标签和值作为字符串提供。在幕后,它在字符串形式和相应的二进制属性表示之间进行映射。

问题是ExifInterface该类只知道如何映射一组固定的属性。此外,API 不提供将新的(例如自定义)exif 属性的描述符添加到其映射表的方法。

如果你真的很绝望,替代方案是:

  • 寻找适用于 Android 的替代库。
  • 用反射做一些讨厌的事情,为ExifInterface的内部 ( private) 映射表添加额外的映射。如果您尝试这样做,您将需要处理这样一个事实,即ExifInterface' 的实现随着时间的推移发生了根本性的变化。(在一些旧版本中,属性的编码和解码是在本机代码库中实现的!)
于 2020-01-14T15:13:59.997 回答