鸿蒙Next如何实现打开相册选图片功能?
2025-01-03 11:01:31
37次阅读
0个评论
问题描述:鸿蒙Next如何实现打开相册选图片功能
应用场景:用户个人中心自定义头像的时候,需要选择相册上传照片。
解决方案:
使用picker这个API实现从系统上获取相册图片这个点的,
1、首先要实例一个选择参数PhotoSelectOptions 里面需要设置媒体文件类型还有一个数量
2、然后—>实例一个选择器PhotoViewPicker,
3、通过自带的——>select方法传入先前设置的选择参数即可完成选择并获取到选择图片的文件路径
4、解析文件路径转为PixelMap格式或者base64格式
5、再对接后端接口上传数据
// 导入选择器模块和文件管理模块
import { zipImageUtil} from '../utils/ZipImageUtil'
import { photoAccessHelper } from '@kit.MediaLibraryKit';
import { image } from '@kit.ImageKit';
import { fileIo as fs } from '@kit.CoreFileKit';
import { buffer as Buffer} from '@kit.ArkTS';
// 拉起相册,选择图片方法
class getPhotofromAlbum{
getAlbum: string = '显示相册中的图片';
pixel: image.PixelMap | undefined = undefined;
albumPath: string = '';
photoSize: number = 0;
async initData():Promise<string>{
try{
//创建图片-音频类型文件选择选项实例
let PhotoSelectOptions = new photoAccessHelper.PhotoSelectOptions();
PhotoSelectOptions.MIMEType = photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE;
PhotoSelectOptions.maxSelectNumber = 1; // 最多选择数量
//创建图库选择器实例,调用PhotoViewPicker.select接口拉起图库界面进行文件选择。文件选择成功后,返回PhotoSelectResult结果集。
let photoPicker = new photoAccessHelper.PhotoViewPicker();
let photoSelectResult: photoAccessHelper.PhotoSelectResult = await photoPicker.select(PhotoSelectOptions);
this.albumPath = photoSelectResult.photoUris[0]; //获得到选择图片的文件路径
// 使用file解析文件,并读取图片为buffer
const file = fs.openSync(this.albumPath, fs.OpenMode.READ_ONLY);
this.photoSize = fs.statSync(file.fd).size;
console.info('Photo Size: ' + this.photoSize);
let buffer = new ArrayBuffer(this.photoSize);
fs.readSync(file.fd, buffer);
fs.closeSync(file);
// 解码成PixelMap
const imageSource = image.createImageSource(buffer);
console.log('imageSource: ' + JSON.stringify(imageSource));
let pixelMap = await imageSource.createPixelMap({});
//设置打包参数
const imagePackerApi = image.createImagePacker();
const packOpts: image.PackingOption = { format: "image/jpeg", quality: 100 };
let imageBuffer: ArrayBuffer = new ArrayBuffer(1);
// 图片压缩或重新打包
imageBuffer = await imagePackerApi.packing(imageSource, packOpts);
imageBuffer = await zipImageUtil.packingImage(imageBuffer, pixelMap, 100, 500*1024); //压缩到500kb
console.log('压缩后的字节长度:'+imageBuffer.byteLength/1024)
//转成base64地址
let base64Str:string = Buffer.from(imageBuffer).toString('base64')
return base64Str
}catch(e){
throw new Error(`相册 获取照片失败 : ${JSON.stringify(e)}`);
}
}
}
调用方法
new getPictureFromAlbum().initData().then(res => {
let base64=res
})
00
- 0回答
- 0粉丝
- 0关注
相关话题
- 鸿蒙保存图片到相册
- 如何实现防截屏功能
- OpenHarmony 如何实现防截屏功能
- 【HarmonyOS NEXT】实现页面水印功能
- OpenHarmony: 如何实现跨模块的页面跳转功能
- 鸿蒙next boss直聘招聘app 聊天功能实现来
- 【HarmonyOS NEXT】 Audio 实现录音及播放功能
- 鸿蒙无权限实现图片选择拍照和录视频
- 如何调用系统拍照并获取图片
- 打开文件
- HarmonyOS NEXT应用开发边学边玩系列:从零实现一影视APP (三、影视搜索页功能实现)
- 【待更新】OpenHarmony——家庭云相册
- 如何实现跨文件组件复用
- 如何实现应用的屏幕自动旋转
- 【HarmonyOS NEXT】Tabs组件实现类微信(可滑动的)tabBar页签切换页面功能