鸿蒙Next如何实现打开相册选图片功能?
2025-01-03 11:01:31
420次阅读
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关注
相关话题
- 鸿蒙保存图片到相册
- 【HarmonyOS】鸿蒙中如何获取用户相册图片?photoAccessHelper.PhotoViewPicker
- 【HarmonyOS NEXT】 鸿蒙图片或视频保存相册
- 鸿蒙NEXT上传图片功能PhotoViewPicker核心功能解析
- 如何实现防截屏功能
- HarmonyOS 读取系统相册图片并预览
- OpenHarmony 如何实现防截屏功能
- 【HarmonyOS NEXT】鸿蒙使用ScanKit实现自定义扫码 (二)之解析相册图片二维码
- 打开文件
- OpenHarmony: 如何实现跨模块的页面跳转功能
- HarmonyOS实战:一招搞定保存图片到相册
- 应用中的“复制功能”如何实现##HarmonyOS应用开发##
- 68.Harmonyos NEXT 图片预览组件应用实践(一):相册与社交场景
- 【HarmonyOS 5】鸿蒙应用实现发票扫描、文档扫描输出PDF图片或者表格的功能
- 【HarmonyOS 5】鸿蒙应用实现发票扫描、文档扫描输出PDF图片或者表格的功能

