HarmonyOS鸿蒙Next中图片选择API解惑
HarmonyOS鸿蒙Next中图片选择API解惑 选择图片的api:
1、picker.PhotoViewPicker和photoAccessHelper.PhotoViewPicker有什么区别。
2、这两种方式是否都需要申请’ohos.permission.READ_IMAGEVIDEO’权限。
3、文档中提到的临时授权方式具体是什么意思。
-
picker是文件选择器,封装PhotoViewPicker、DocumentViewPicker、AudioViewPicker等API模块具有选择与保存的能力 photoAccessHelper是相册模块,包括创建相册以及访问、修改相册中的媒体数据信息等 在图片相册处理相关的功能建议使用photoAccessHelper相册模块
-
在选择图片获取信息方面,两种方式都可以使用临时授权方式,不申请’ohos.permission.READ_IMAGEVIDEO’权限
-
临时授权可参考此文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/user-file-uri-intro-V5#媒体文件uri的使用方式 ,如果不想申请权限,必须先通过PhotoViewPicker.select接口得到图片的uri,才可获取部分信息。
Demo:
import picker from '@ohos.file.picker';
import { BusinessError } from '@ohos.base';
import dataSharePredicates from '@ohos.data.dataSharePredicates';
import photoAccessHelper from '@ohos.file.photoAccessHelper';
import image from '@ohos.multimedia.image'
@Entry
@Component
struct Index {
@State imagePixelMap: image.PixelMap | undefined = undefined
@State uris: Array<string> = [];
build() {
Row() {
Column() {
Text('选择图片,获取url信息')
.fontSize(30)
.fontWeight(FontWeight.Bold)
.onClick(() => {
let photoSelectOptions = new picker.PhotoSelectOptions();
photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE;
photoSelectOptions.maxSelectNumber = 5;
let photoPicker = new picker.PhotoViewPicker(getContext(this));
photoPicker.select(photoSelectOptions).then((photoSelectResult: picker.PhotoSelectResult) => {
this.uris = photoSelectResult.photoUris;
let predicates: dataSharePredicates.DataSharePredicates = new dataSharePredicates.DataSharePredicates();
predicates.equalTo('uri', this.uris[0]);
let fetchOption: photoAccessHelper.FetchOptions = {
fetchColumns: [photoAccessHelper.PhotoKeys.WIDTH, photoAccessHelper.PhotoKeys.HEIGHT,
photoAccessHelper.PhotoKeys.TITLE],
predicates: predicates
};
photoAccessHelper.getPhotoAccessHelper(getContext(this))
.getAssets(fetchOption)
.then((fetchResult) => {
fetchResult.getFirstObject().then((asset) => {
asset.getThumbnail((err, pixelMap) => {
if (err == undefined) {
console.info('getThumbnail successful ' + pixelMap);
this.imagePixelMap = pixelMap
} else {
console.error('getThumbnail fail', err);
}
});
})
})
}).catch((err: BusinessError) => {
});
})
Image(this.imagePixelMap)
.width(100)
.height(100)
.backgroundColor(Color.Red)
}
.width('100%')
}
.height('100%')
}
}
更多关于HarmonyOS鸿蒙Next中图片选择API解惑的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
HarmonyOS鸿蒙Next中的图片选择API主要涉及PhotoPicker模块,用于实现图片的选择、预览和获取功能。开发者可以通过PhotoPicker提供的接口,调用系统相册或文件管理器,让用户选择图片。
主要API介绍:
PhotoPicker.startPhotoPicker():启动图片选择器,允许用户从相册或文件管理器中选择图片。PhotoPicker.getSelectedPhotos():获取用户选择的图片列表,返回结果为图片的URI或文件路径。PhotoPicker.setMaxSelectCount():设置用户最多可选择的图片数量。PhotoPicker.setFilterType():设置图片过滤器,限制用户只能选择特定类型的图片(如JPEG、PNG等)。
使用场景:
- 单张图片选择:适用于用户需要上传头像、证件照等场景。
- 多张图片选择:适用于用户需要批量上传图片的场景,如社交媒体发帖。
- 图片预览:在选择图片前,允许用户预览图片内容,确保选择的图片符合需求。
注意事项:
- 调用
PhotoPicker时需要申请相应的权限,如读取存储权限。 - 返回的图片URI或文件路径需要进一步处理,如解码、压缩或上传。
PhotoPicker支持跨设备调用,开发者可以指定目标设备,实现跨设备图片选择。
通过PhotoPicker模块,开发者可以快速集成图片选择功能,提升应用的用户体验。
在HarmonyOS鸿蒙Next中,图片选择API主要通过@ohos.file.picker模块实现。开发者可以使用PhotoViewPicker类来选择图片,支持单张或多张图片选择。主要步骤如下:
- 创建
PhotoViewPicker实例。 - 配置选择参数,如选择数量、文件类型等。
- 调用
select方法,弹出图片选择界面。 - 通过Promise或回调获取选择的图片URI。
示例代码:
import picker from '@ohos.file.picker';
let photoPicker = new picker.PhotoViewPicker();
photoPicker.select().then((PhotoSelectResult) => {
console.info('PhotoSelectResult uri: ' + PhotoSelectResult[0].uri);
}).catch((err) => {
console.error('PhotoSelectResult err: ' + err);
});
该API简化了图片选择流程,提升了开发效率。

