HarmonyOS鸿蒙Next中为什么createImageSource返回失败,路径不对吗?

HarmonyOS鸿蒙Next中为什么createImageSource返回失败,路径不对吗?

我有一段代码,想通过图片选择器选择图片,并读取图片信息,总是报异常

async getImage() {
  try {
    let PhotoSelectOptions = new picker.PhotoSelectOptions();
    PhotoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
    PhotoSelectOptions.maxSelectNumber = 1;
    let photoPicker = new picker.PhotoViewPicker();
    photoPicker.select(PhotoSelectOptions).then(async (PhotoSelectResult) => {
      this.imagePath = PhotoSelectResult.photoUris[0];
      let imageSource = image.createImageSource(this.imagePath)
      let imageInfo = await imageSource.getImageInfo()
      console.log('zzz, width=' + imageInfo.size.width.toString())
    }).catch((err) => {
      console.error('zzz,PhotoViewPicker.select failed with err: ' + err);
    });
  } catch (err) {
    console.error('zzz,PhotoViewPicker failed with err: ' + err);
  }
}

异常信息,如下

zzz,PhotoViewPicker.select failed with err: TypeError: Cannot read property getImageInfo of undefined

很明显imageSource没有创建成功,难道是路径不对吗? 正确的路径应该怎么获取呢?


更多关于HarmonyOS鸿蒙Next中为什么createImageSource返回失败,路径不对吗?的实战教程也可以访问 https://www.itying.com/category-93-b0.html

12 回复

你看,你申请的权限中包含ACL使能为True的权限,这个要该签名工具文件

屏幕截图 2023-10-31 121941.png

更多关于HarmonyOS鸿蒙Next中为什么createImageSource返回失败,路径不对吗?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


大佬,我这边有一个问题,也是关于createImageSource创建图片源实例不成功的问题,能帮忙看一下吗,

图片

你可以打印一下你获取的path,看看是怎么样的,可以试试我下面这个方法

//Stage模型
const context = getContext(this);
const path = context.cacheDir + "/test.jpg";
const imageSourceApi = image.createImageSource(path);

通过加LOG,看到PhotoViewPicker选择文件得到的路径是这个样子的,

PhotoSelectResult.photoUris[0]=datashare:///media/image/111

deveco中,这个test.jpg应该放在哪里啊?resources/base/media/下吗?这个文件放在哪才能在应用运行时拷贝到context.cacheDir目录呢?

谢谢,

希望HarmonyOS能继续优化系统稳定性,减少崩溃和重启的情况。

那这个有点难搞,你还得把选中的图片保存到你的项目文件里面,然后通过项目文件去获取图片实例,在获取图片具体详细。

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

申请权限了吗,

基本信息

<div>
    <p>用户信息</p>
    <ul>
        <li><strong>用户名:</strong>张三</li>
        <li><strong>邮箱:</strong><a href="mailto:zhangsan@example.com">zhangsan@example.com</a></li>
        <li><strong>电话:</strong>123-456-7890</li>
    </ul>
</div>

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

配置文件中申请过权限了。

module.json5中加了,

{
  "requestPermissions": [
    {
      "name": "ohos.permission.READ_MEDIA"
    },
    {
      "name": "ohos.permission.WRITE_MEDIA"
    },
    {
      "name": "ohos.permission.MEDIA_LOCATION"
    }
  ]
}

后来在代码中又加了,

const PERMISSIONS: Array<Permissions> = ['ohos.permission.READ_MEDIA', 'ohos.permission.WRITE_MEDIA', 'ohos.permission.MEDIA_LOCATION'];

this.media = mediaLibrary.getMediaLibrary(getContext(this));
await abilityAccessCtrl.createAtManager().requestPermissionsFromUser(getContext(this), PERMISSIONS);

这样也没行。

在HarmonyOS鸿蒙Next中,createImageSource返回失败可能与路径问题有关。createImageSource用于从指定路径创建图像源,路径可以是文件路径、资源路径或网络路径。如果路径不正确或文件不存在,函数将返回失败。

首先,检查路径是否正确。文件路径应指向设备上的有效文件,资源路径应使用正确的资源标识符,网络路径应确保URL有效且可访问。其次,确保文件或资源存在且可读。如果文件被删除或资源未正确打包,也会导致失败。

此外,权限问题也可能导致createImageSource失败。确保应用具有读取文件或访问网络的权限。如果路径和权限都正确,但仍返回失败,可能是系统或API的bug,需进一步排查。

在HarmonyOS鸿蒙Next中,createImageSource返回失败通常与路径问题有关。请检查以下几点:

  1. 路径格式:确保路径符合系统要求,如使用正确的URI或文件路径。
  2. 文件存在性:确认文件确实存在于指定路径。
  3. 权限设置:确保应用有访问该路径的权限,必要时在config.json中声明相关权限。
  4. 路径编码:避免路径中包含特殊字符,必要时进行URL编码。

如果问题依旧,建议使用调试工具检查具体错误信息。

回到顶部