HarmonyOS中图片exif信息获取异常?

HarmonyOS中图片exif信息获取异常?在尝试读取相册图片的 exif 信息时,遇到了一些问题,:
1.在获取部分字段时,会发生异常,错误信息为:“There is generic napi failure!”,想问下这个是否符合预期,出现该错误的字段有:GPSDateStamp, ImageDescription, PhotoMode, SensitivityType, StandardOutputSensitivity, RecommendedExposureIndex, UserComment。
2.部分字段可以正常获取,但取到的值为:default_exif_value。有一个诉求,需要把图片 A 的 exif 信息复制到图片 B 中,假如图片 A 中有值为 default_exif_value 的字段,该如何处理?将图片 B 的该字段赋值为"空串"吗,还是赋值为"default_exif_value"?
3.如问题 2 中的诉求,目是将 image.PropertyKey 的所有属性放到了数组中,遍历获取后通过 modifyImageProperty 进行修改,但该方式可维护性较差,是否有更好的方案,可以获取到 image.PropertyKey 中的所有属性;或者有更简便的方法,将图片 A 中的所有 exif 信息更新至图片 B。

阅读 608
avatarAI BotBETA

1. 异常问题:"There is generic napi failure!"

这个错误 "There is generic napi failure!" 通常表示在调用本地API(如JNI或NAPI)时发生了某种未具体指定的失败。在HarmonyOS环境中,这可能是由于API的限制、权限问题、或API本身的不稳定性导致的。对于提到的特定字段(如GPSDateStamp, ImageDescription, PhotoMode等)出现此错误,可能有以下原因:

  • API限制:HarmonyOS可能对某些Exif字段的访问有限制,特别是那些可能涉及用户隐私的字段(如GPS信息)。
  • 数据不完整:图片本身可能不包含这些字段的信息,或者信息已损坏。
  • 库或框架问题:使用的库或框架可能不完全支持所有Exif字段的读取。

建议

  • 检查HarmonyOS的官方文档,确认哪些Exif字段是支持的。
  • 尝试更新到最新的HarmonyOS版本或库/框架版本。
  • 捕获异常并优雅地处理,可能的话提供回退机制。

2. 处理默认值 "default_exif_value"

当遇到值为 default_exif_value 的字段时,处理方式取决于你的应用场景:

  • 如果需要保留原始信息:可以选择将图片B的相应字段也设置为 "default_exif_value",以保持一致性。
  • 如果不需要保留原始信息:可以考虑将字段设置为空字符串或其他合适的默认值,但应确保这不会违反你的应用逻辑或用户期望。

建议

  • 在用户界面中清楚地指示哪些字段是默认值,以避免混淆。
  • 根据应用的具体需求来决定如何处理这些默认值。

3. 改进Exif信息复制的方法

对于将图片A的Exif信息复制到图片B的需求,你提到的方法(遍历image.PropertyKey的所有属性)虽然可行但可维护性较差。以下是一些改进建议:

  • 使用映射或字典:维护一个从Exif字段名到其值的映射,这样可以更清晰地表示哪些字段需要被复制。
  • 封装功能:创建一个函数或方法,专门用于复制Exif信息,这样代码更加模块化和可重用。
  • 查找库或工具:检查是否有现成的库或工具可以简化Exif信息的处理,例如直接使用第三方库来读取和写入Exif信息。

示例代码(伪代码):

Map<String, String> exifToCopy = new HashMap<>();
// 假设你已经从图片A中读取了Exif信息并填充到exifToCopy中

// 遍历exifToCopy,并将信息复制到图片B
for (Map.Entry<String, String> entry : exifToCopy.entrySet()) {
    String key = entry.getKey();
    String value = entry.getValue();
    // 检查value是否为"default_exif_value",并决定如何处理
    if (!"default_exif_value".equals(value)) {
        modifyImageProperty(图片B, key, value);
    } else {
        // 根据需求决定是设置为空串还是保持default_exif_value
        modifyImageProperty(图片B, key, ""); // 或其他默认值
    }
}

这种方法提高了代码的可读性和可维护性,同时也使得处理默认值变得更加灵活。

1 个回答
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题