Android为图像文件创建自定义Exif属性

Android为图像文件创建自定义Exif属性,android,jpeg,exif,Android,Jpeg,Exif,目前,我正在尝试将自定义exif标记/数据添加到相册中的图像文件中 我能够修改类中定义的现有标记 但是,我想存储自定义数据,例如我的应用程序用户的用户id,但似乎无法创建自定义exif属性 我找到的最接近的解决方案是,但不起作用,尝试用标记保存Exif数据: “用户评论” 代码: 您可以将任何您想要的东西(作为字符串)放入其中,然后简单地解析字符串。我希望我们能够创建并命名我们自己的exif标签,但现实是我们不能。因此,这是我提出的最佳解决方案。尝试用标记保存Exif数据: “用户评论” 代码:

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

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

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


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

尝试用标记保存Exif数据:

“用户评论”

代码:


您可以将任何您想要的东西(作为字符串)放入其中,然后简单地解析字符串。我希望我们能够创建并命名我们自己的exif标签,但现实是我们不能。因此,这是我提出的最佳解决方案。

尝试用标记保存Exif数据:

“用户评论”

代码:


您可以将任何您想要的东西(作为字符串)放入其中,然后简单地解析字符串。我希望我们能够创建并命名我们自己的exif标签,但现实是我们不能。因此,这是我提出的最佳解决方案。

使用标签
“ImageDescription”

代码


使用标签“ImageDescription”保存Exif数据

代码


如果无法使用现有的exif属性(如“UserComment”或“ImageDescription”),那么使用
ExifInterface
就太不走运了

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

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

如果你真的很绝望,那么其他选择是:

  • 寻找一个与Android兼容的替代库
  • 使用反射来添加额外的映射到
    ExifInterface
    的内部(
    private
    )映射表。如果您尝试这样做,您将需要处理这样一个事实:
    ExifInterface
    的实现随着时间的推移发生了根本性的变化。(在一些旧版本中,属性的编码和解码是在本机代码库中实现的!)

如果无法使用现有的exif属性(如“UserComment”或“ImageDescription”),那么使用
ExifInterface
就不走运了

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

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

如果你真的很绝望,那么其他选择是:

  • 寻找一个与Android兼容的替代库
  • 使用反射来添加额外的映射到
    ExifInterface
    的内部(
    private
    )映射表。如果您尝试这样做,您将需要处理这样一个事实:
    ExifInterface
    的实现随着时间的推移发生了根本性的变化。(在一些旧版本中,属性的编码和解码是在本机代码库中实现的!)

我尝试过ObjExifInterface.setAttribute(“UserComment”、“Notes…”);但是它不起作用。我已经试过使用ObjExifInterface.setAttribute(“UserComment”,“Notes…”);但是它不起作用。信息:根据Android Studio警告,这需要API级别24+。信息:根据Android Studio警告,这需要API级别24+。
String mString = "Your message here";     
ExifInterface exif = new ExifInterface(path_of_your_jpeg_file);
exif.setAttribute("UserComment", mString);
exif.saveAttributes();
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
}