HarmonyOS 鸿蒙Next 图片压缩API使用时报错ImageSource mismatch

发布于 1周前 作者 phonegap100 来自 鸿蒙OS

HarmonyOS 鸿蒙Next 图片压缩API使用时报错ImageSource mismatch 如题,我使用PhotoPicker选取一张图片,然后在回调中获取了被选择图片的uri,传入imagePacker的packing方法中,无法正常图片压缩

若图片为PhotoPicker选择的图片,就报错ImageSource mismatch。若图片为rawfile中的图片,就报错undefined

我已经排除掉的可能:

  1. 权限。因为是借助PhotoPicker临时授权访问图片,压缩后的图片也无需写入文件系统,所以无需申请任何权限。
  2. 在图片选择的回调中处理。使用Picker选择媒体库资源-Media Library Kit(媒体文件管理服务)-媒体 - 华为HarmonyOS开发者 (huawei.com)

已经依照文档要求保存图片uri,然后在其他事件中使用uri了,无论我是按照文档要求,还是直接在回调中处理,都是一样的报错

以下是我的代码片段,麻烦用过的大佬帮忙看看问题可能出在哪里:

  1. 选择图片

cke_26361.png

  1. 图片压缩

cke_34546.png

cke_35323.png

public static async compressImage(uri: string, resourceManager: resourceManager.ResourceManager) {
    const imageSource = image.createImageSource(uri)
    const option: image.PackingOption = {
        format: 'image/png',
        quality: 80
    }
    const imagePacker = image.createImagePacker()
    imagePacker.packing(imageSource, option, (error: BusinessError, data: ArrayBuffer) => {
        if (error) {
            ;
        }
    })
    const packer2 = image.createImagePacker()
    const fd = resourceManager.getRawFdSync('abc.png')
    const imageSource2 = image.createImageSource(fd)
    packer2.packing(imageSource2, option, (error: BusinessError, data: ArrayBuffer) => {
        if (error) {
            ;
        }
    })
}

更多关于HarmonyOS 鸿蒙Next 图片压缩API使用时报错ImageSource mismatch的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

要拷贝到沙箱再上传

更多关于HarmonyOS 鸿蒙Next 图片压缩API使用时报错ImageSource mismatch的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


和沙箱有关系,但是和这个上传的关系不大,是通过uri来createImageSource,有这个沙箱的限制,详见2楼,

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:BV1S4411E7LY/?p=17

问题终结,是我加班加到脑子不清楚了,第二个压缩rawfile中的文件其实已经成功了,error是undefind就是成功

受此启发,第一个压缩选择的图片,也仿照这个实现,先打开文件获取fd,再用fd创建imageSource即可。这个压缩不成功的原因是createImageSource(uri: string): ImageSource 仅支持应用沙箱路径,通过系统选择器临时授权的文件在下载文件夹中,不在应用自己的沙箱内。通过fd创建则没有这个限制。

https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-image-V5#imagecreateimagesource

在HarmonyOS鸿蒙Next中使用图片压缩API时,出现ImageSource mismatch错误,通常是由于传入的图片源与API期望的格式不匹配。鸿蒙Next的图片压缩API要求传入的图片源必须是ImageSource类型,且该图片源需要符合特定的格式或状态。

ImageSource是鸿蒙系统中用于表示图片数据的类,它可以从文件、资源、网络等多种来源加载图片。如果传入的图片源不是ImageSource类型,或者图片源的状态不符合API的要求(例如图片未正确加载或解码),就会抛出ImageSource mismatch错误。

要解决此问题,首先确保传入的图片源是通过ImageSource类正确创建的。例如,使用ImageSource.createFromFile()ImageSource.createFromResource()等方法生成ImageSource对象。其次,确保图片源在传入API之前已经成功加载和解码。可以通过检查ImageSource的状态或使用ImageSource.getImageInfo()方法验证图片信息。

如果图片源是从网络加载的,确保网络请求已完成且图片数据完整。如果图片源是从文件加载的,确保文件路径正确且文件存在。如果图片源是从资源加载的,确保资源ID正确且资源可用。

总之,ImageSource mismatch错误的核心在于图片源的类型或状态不符合API要求,需确保传入的图片源是有效的ImageSource对象且已正确加载。

在HarmonyOS鸿蒙Next中使用图片压缩API时,出现“ImageSource mismatch”错误,通常是由于传入的图片资源类型不匹配导致的。请检查以下几点:

  • 资源类型:确保传入的图片资源是ImageSource类型,而不是其他类型(如PixelMapResource)。
  • 资源路径:确认图片路径正确,且资源文件存在。
  • API调用:检查API调用方式,确保参数传递正确。

示例代码:

ImageSource imageSource = ImageSource.create("path/to/image.jpg", null);
ImagePacker imagePacker = ImagePacker.create();
imagePacker.pack(imageSource, "path/to/output.jpg", new PackOptions());

如果问题仍未解决,建议查阅官方文档或社区支持。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!