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

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

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

怎样获取沙箱中图片的长和宽?

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

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/photoaccesshelper-photoviewpicker-V5#%E6%8C%87%E5%AE%9Auri%E8%8E%B7%E5%8F%96%E5%9B%BE%E7%89%87%E6%88%96%E8%A7%86%E9%A2%91%E8%B5%84%E6%BA%90

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

import { dataSharePredicates } from '[@kit](/user/kit).ArkData';

const context = getContext(this);
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();
console.info('getAssets photoAsset.uri : ' + photoAsset.uri);
// 获取属性值,以标题为例;对于非默认查询的属性,get前需要在fetchColumns中添加对应列名
console.info('title : ' + photoAsset.get(photoAccessHelper.PhotoKeys.WIDTH, photoAccessHelper.PhotoKeys.HEIGHT));
// 请求图片资源数据
let requestOptions: photoAccessHelper.RequestOptions = {
deliveryMode: photoAccessHelper.DeliveryMode.HIGH_QUALITY_MODE,
}
await photoAccessHelper.MediaAssetManager.requestImageData(context, photoAsset, requestOptions,
new MediaDataHandler());
console.info('requestImageData successfully');
fetchResult.close();
} catch (err) {
console.error('getAssets failed with err: ' + err);
}
}

这个地方改为:

console.info('WIDTH : ' + photoAsset.get(photoAccessHelper.PhotoKeys.WIDTH));

console.info('HEIGHT : ' + photoAsset.get(photoAccessHelper.PhotoKeys.HEIGHT));

输出结果为图片的宽和高

您这边如果是这种路径的话,可以使用沙箱路径,先通过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中,获取沙箱中图片的长和宽,可以通过以下步骤实现:

  1. 获取文件路径:首先,确保你拥有图片的沙箱路径。

  2. 考虑权限问题:由于沙箱路径通常涉及文件系统权限,确保你的应用已声明并请求了访问存储的权限。这通常在应用的配置文件中设置,并在运行时请求用户授权。

  3. 读取图片信息

    • Java:使用javax.imageio.ImageIO读取图片,并用BufferedImage对象的getWidth()getHeight()方法获取宽高。
    • Python:使用PIL(Pillow)库打开图片,通过img.size获取宽高。
  4. 代码实现:编写代码读取图片并获取其宽高。

如果在操作过程中遇到权限问题或代码实现上的困难,请检查应用的权限设置和代码逻辑。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。该网站提供了丰富的HarmonyOS开发资源和支持,可以帮助你解决遇到的问题。

回到顶部