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。

阅读 774
avatarAI BotBETA

回答

  1. 异常错误“There is generic napi failure!”
    这个错误通常指示在调用原生API(如Node.js的N-API或其他类似的本地接口)时发生了问题。在HarmonyOS环境中,如果某些特定的Exif标签由于硬件、系统限制或软件实现问题而无法读取,可能会抛出此类错误。对于你提到的字段(如GPSDateStamp, ImageDescription等),这些字段可能因为照片本身不包含这些信息,或者HarmonyOS的API对这些字段的支持不完整而导致读取失败。这不一定是预期的行为,但它是可能的。

    解决方法:

    • 检查照片是否确实包含这些Exif信息。
    • 尝试在不同的设备或不同版本的HarmonyOS上重现问题。
    • 查阅HarmonyOS的官方文档或开发者社区,看是否有相关的已知问题或解决方案。
  2. 处理default_exif_value
    当遇到值为default_exif_value的字段时,这通常意味着该字段在图片中没有明确的值,或者读取器无法识别其值。在将图片A的Exif信息复制到图片B时,是否应该保留这个值取决于你的应用需求。

    • 如果保留这个值对于你的应用来说有意义(比如表示某个设置是默认的),那么可以将它复制到图片B。
    • 如果没有实际意义,可以考虑将其设置为空串或删除该字段(如果API支持)。

    解决方案:

    • 在复制Exif信息之前,检查每个字段的值,并根据需要替换或删除。
  3. 优化Exif信息复制的方案
    当前你使用的方法(遍历数组并逐个修改)虽然可行,但确实可维护性较差。为了改进这一点,你可以考虑以下方案:

    • 使用对象映射:创建一个包含所有Exif属性键和对应值的对象映射,这样你可以更容易地看到哪些字段需要被复制。
    • 封装函数:编写一个函数来处理Exif信息的复制逻辑,该函数接受两个图片对象作为参数,并自动处理字段的复制。
    • 利用库或框架:如果HarmonyOS提供了处理图片和Exif信息的库或框架,尽量使用它们来简化代码和提高效率。
    • 错误处理:在复制过程中添加错误处理逻辑,以便在出现问题时能够优雅地处理。

    示例伪代码:

    function copyExif(imageA, imageB) {
        const exifMap = getExifMap(imageA); // 假设这个函数会返回一个包含Exif信息的对象
        for (const key in exifMap) {
            if (exifMap.hasOwnProperty(key) && exifMap[key] !== 'default_exif_value') {
                modifyImageProperty(imageB, key, exifMap[key]);
            }
        }
    }

    这个示例中,getExifMap函数负责从图片A中提取Exif信息并返回一个对象,然后copyExif函数遍历这个对象,并将非默认值的字段复制到图片B中。

2 个回答

出现 “There is generic napi failure!” 错误可能是由于系统对某些特定的 EXIF 字段不支持或者读取过程中出现了问题。可以检查一下这些字段是否在 HarmonyOS 的支持范围内。

对于值为 “default_exif_value” 的字段,如果要复制 EXIF 信息到图片 B,具体赋值为 “空串” 还是 “default_exif_value” 取决于你的业务需求。如果希望保持一致性,可以赋值为 “default_exif_value”;如果希望清理不确定的值,可以赋值为 “空串”。

目前没有更简便的方法直接获取 image.PropertyKey 中的所有属性并进行复制。但是可以考虑优化代码结构,比如将读取和复制 EXIF 信息的过程封装成一个函数,提高可维护性。

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