【问题标题】:Android Create Custom Exif attributes for an image fileAndroid 为图像文件创建自定义 Exif 属性
【发布时间】:2020-05-01 05:24:24
【问题描述】:

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

我可以修改ExifInterface类中定义的现有标签

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

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

【问题讨论】:

    标签: android jpeg exif


    【解决方案1】:

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

    “用户评论”

    代码:

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

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

    【讨论】:

    • 我试过 ObjExifInterface.setAttribute("UserComment", "Notes...");但它不起作用。
    【解决方案2】:

    使用标签"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
    }
    

    【讨论】:

    • 信息:根据 Android Studio 警告,这需要 API 级别 24+。
    【解决方案3】:

    如果您不能使用现有的 exif 属性(例如“UserComment”或“ImageDescription”),那么您在使用 ExifInterface 时会很不走运。

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

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

    如果你真的很绝望,可以选择:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-19
      • 1970-01-01
      • 1970-01-01
      • 2012-06-14
      相关资源
      最近更新 更多