HarmonyOS 鸿蒙Next怎样获取沙箱中图片的长和宽?
HarmonyOS 鸿蒙Next怎样获取沙箱中图片的长和宽?
怎样获取沙箱中图片的长和宽?
2 回复
可以使用以下方法获取沙箱中图片的长和宽,可以参考文档:
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对象来获取图片的宽高
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中,获取沙箱中图片的长和宽,可以通过以下步骤实现:
-
获取文件路径:首先,确保你拥有图片的沙箱路径。
-
考虑权限问题:由于沙箱路径通常涉及文件系统权限,确保你的应用已声明并请求了访问存储的权限。这通常在应用的配置文件中设置,并在运行时请求用户授权。
-
读取图片信息:
- Java:使用
javax.imageio.ImageIO
读取图片,并用BufferedImage
对象的getWidth()
和getHeight()
方法获取宽高。 - Python:使用PIL(Pillow)库打开图片,通过
img.size
获取宽高。
- Java:使用
-
代码实现:编写代码读取图片并获取其宽高。
如果在操作过程中遇到权限问题或代码实现上的困难,请检查应用的权限设置和代码逻辑。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。该网站提供了丰富的HarmonyOS开发资源和支持,可以帮助你解决遇到的问题。