【发布时间】:2020-05-01 05:24:24
【问题描述】:
目前我正在尝试将自定义 exif 标签/数据添加到相册中的图像文件中。
我可以修改ExifInterface类中定义的现有标签
但是,我想存储自定义数据,例如我的应用用户的用户 ID,但我似乎无法创建自定义 exif 属性
我找到的最接近的解决方案是here,但不起作用,
【问题讨论】:
目前我正在尝试将自定义 exif 标签/数据添加到相册中的图像文件中。
我可以修改ExifInterface类中定义的现有标签
但是,我想存储自定义数据,例如我的应用用户的用户 ID,但我似乎无法创建自定义 exif 属性
我找到的最接近的解决方案是here,但不起作用,
【问题讨论】:
尝试使用标签保存 Exif 数据:
“用户评论”
代码:
String mString = "Your message here";
ExifInterface exif = new ExifInterface(path_of_your_jpeg_file);
exif.setAttribute("UserComment", mString);
exif.saveAttributes();
你可以把你想要的任何东西(作为字符串)放在那里,然后简单地解析字符串。我希望我们可以创建和命名我们自己的 exif 标签,但事实是我们做不到。所以这是我想出的最佳解决方案。
【讨论】:
使用标签"ImageDescription"保存Exif数据
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
}
【讨论】:
如果您不能使用现有的 exif 属性(例如“UserComment”或“ImageDescription”),那么您在使用 ExifInterface 时会很不走运。
Exif 属性表示为二进制标记号,其值以二进制数据格式编码。 ExifInterface 类从程序员那里抽象出来,并提供了一个 setAttribute 方法,其中标签和值作为字符串提供。在幕后,它在字符串形式和相应的二进制属性表示之间进行映射。
问题在于ExifInterface 类只知道如何映射一组固定的属性。此外,API 不提供将新(例如自定义)exif 属性的描述符添加到其映射表的方法。
如果你真的很绝望,可以选择:
ExifInterface的内部(private)映射表添加额外的映射。如果您尝试这样做,您将需要处理ExifInterface 的实现随着时间的推移发生了根本变化的事实。 (在一些旧版本中,属性的编码和解码是在原生代码库中实现的!)【讨论】: