【问题标题】:Copy all exif tags from one jpeg to another将所有 exif 标签从一个 jpeg 复制到另一个
【发布时间】:2021-10-13 08:09:46
【问题描述】:

我正在尝试找出将所有 exif 标签从一个 JEPG 复制到另一个的最佳方法。看起来 ExifInterface (https://developer.android.com/reference/android/media/ExifInterface) 是我最好的选择。

然而,

  1. 无法获取一个 JPEG 中包含的所有标签。
  2. ExifInterface 类中所有标签的完整列表是私有的/受保护的。

有没有比将所有 ~100 个标签名称添加到我的班级更好的选择?每次我发现 Android 相机正在添加一个我没有考虑到的新 exif 标签时,我真的不想修改代码。

【问题讨论】:

标签: android exif android-exifinterface


【解决方案1】:

似乎没有这样的方法可以做到这一点,除了可能使用反射来访问ExifInterface 类中的私有属性。但是,这是不鼓励的,因为当然,实现可能会在未来的版本中中断。为简洁起见,我在下面写了如何做到这一点。

也就是说,您可以使用 Apache Sanslean 之类的东西来做您正在寻找的东西:http://bricolsoftconsulting.com/copying-exif-metadata-using-sanselan/。但是,我自己没有尝试过,所以我不能多说

使用反射

查看ExifInterfacesource,似乎没有“标准”的方式来获取所有标签。但是,您可以使用反射来读取所有键的mAttributes 映射(虽然这不太安全,但这是最后的手段)。这样的东西应该可以工作(Java):


Field f = obj.getClass().getDeclaredField("mAttributes");
f.setAccessible(true);
HashMap<String, ExifAttribute>[] attributes = (HashMap<String, ExifAttribute>[]) f.get(obj);

然后,您可以以相同的方式使用反射来访问目标ExifInterface 并将所有字段复制到其中。

请注意,我查看了 ExifInterface 的 AndroidX 版本,它是原始类的超集,也是推荐使用的类,但在其他情况下也应如此。

【讨论】:

    猜你喜欢
    • 2023-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多