HarmonyOS 鸿蒙Next怎样获取沙箱中图片的长和宽?需要代码

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

HarmonyOS 鸿蒙Next怎样获取沙箱中图片的长和宽?需要代码 怎样获取沙箱中图片的长和宽?需要代码

2 回复

可以使用以下方法获取沙箱中图片的长和宽,可以参考文档:

指定url获取图片或视频

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

demo如下:

import { dataSharePredicates } from '@kit.ArkData';
import { photoAccessHelper } from '@kit.MediaLibraryKit';

const context = this.getContext();
let phAccessHelper = photoAccessHelper.getPhotoAccessHelper(context);

class MediaDataHandler implements photoAccessHelper.MediaAssetDataHandler<ArrayBuffer> {
  onDataPrepared(data: ArrayBuffer) {
    if (data === undefined) {
      console.error('Error occurred when preparing data');
      return;
    }
    console.info('on image data prepared');
    // 应用自定义对资源数据的处理逻辑
  }
}

async function example() {
  let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
  let uri = 'file://media/Photo/1/IMG_datetime_0001/displayName.jpg' // 需保证此uri已存在。
  predicates.equalTo(photoAccessHelper.PhotoKeys.URI, uri.toString());
  let fetchOptions: photoAccessHelper.FetchOptions = {
    fetchColumns: [photoAccessHelper.PhotoKeys.WIDTH, photoAccessHelper.PhotoKeys.HEIGHT],
    predicates: predicates
  };
  try {
    let fetchResult: photoAccessHelper.FetchResult<photoAccessHelper.PhotoAsset> =
      await phAccessHelper.getAssets(fetchOptions);
    let photoAsset: photoAccessHelper.PhotoAsset = await fetchResult.getFirstObject();
    let requestOptions: photoAccessHelper.RequestOptions = {
      deliveryMode: photoAccessHelper.DeliveryMode.HIGH_QUALITY_MODE,
    }
    await photoAccessHelper.MediaAssetManager.requestImageData(context, photoAsset, requestOptions,
      new MediaDataHandler());
    console.info('requestImageData successfully');
    console.info('WIDTH : ' + photoAsset.get(photoAccessHelper.PhotoKeys.WIDTH));
    console.info('HEIGHT : ' + photoAsset.get(photoAccessHelper.PhotoKeys.HEIGHT));
    fetchResult.close();
  } catch (err) {
    console.error('getAssets failed with err: ' + err);
  }
}

输出结果为图片的宽和高

您这边如果是这种路径的话,可以使用沙箱路径,先通过createImageSource构建一个ImageSource实例,再使用createPixelMap创建一个PixelMap对象来获取图片的宽高

参考以下文档: https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-sendableimage-V5#createpixelmap

let uri: sendableImage.ImageSource = sendableImage.createImageSource(图片沙箱路径);
uri.createPixelMap().then((pixelMap) => {
  pixelMap.getImageInfo().then((res) => {
    console.log("awdawdaeq2e12312", JSON.stringify(res.size.width))
    console.log("awdawdaeq2e12312", JSON.stringify(res.size.height))
  })
})

更多关于HarmonyOS 鸿蒙Next怎样获取沙箱中图片的长和宽?需要代码的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS(鸿蒙)系统中,获取沙箱中图片的长和宽,可以通过使用鸿蒙提供的媒体库API来实现。以下是一个简短的代码示例,展示了如何获取图片的尺寸:

#include <media/Image.h>
#include <utils/Size.h>

using namespace OHOS::Media;
using namespace OHOS::Utils;

void GetImageDimensions(const std::string& imagePath) {
    Image image;
    if (image.LoadFromFile(imagePath, Image::PixelFormat::PIXEL_FMT_RGBA_8888) != Image::SUCCESS) {
        // Handle error: failed to load image
        return;
    }
    
    Size size = image.GetSize();
    int width = size.GetWidth();
    int height = size.GetHeight();
    
    // Now you have the width and height of the image
    // Use them as needed
}

在这个示例中,Image 类用于加载图片,并通过 GetSize 方法获取图片的宽度和高度。注意,这里假设图片路径是有效的,并且图片存在于应用的沙箱目录中。

如果图片格式不是RGBA_8888,你可能需要调整 PixelFormat 参数以匹配你的图片格式。

如果问题依旧没法解决请联系官网客服,官网地址是 https://www.itying.com/category-93-b0.html

回到顶部