前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >鸿蒙Next开发如何实现打开相册选图片功能

鸿蒙Next开发如何实现打开相册选图片功能

原创
作者头像
言程序
发布2024-12-27 09:25:36
发布2024-12-27 09:25:36
990
举报
文章被收录于专栏:鸿蒙

问题描述:鸿蒙Next如何实现打开相册选图片功能

应用场景:用户个人中心自定义头像的时候,需要选择相册上传照片。

解决方案:

使用picker这个API实现从系统上获取相册图片这个点的,

1、首先要实例一个选择参数PhotoSelectOptions 里面需要设置媒体文件类型还有一个数量

2、然后—>实例一个选择器PhotoViewPicker,

3、通过自带的——>select方法传入先前设置的选择参数即可完成选择并获取到选择图片的文件路径

4、解析文件路径转为PixelMap格式或者base64格式

5、再对接后端接口上传数据

代码语言:js
复制
// 导入选择器模块和文件管理模块
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)}`);
        }


    }

}

调用方法

代码语言:js
复制
   new getPictureFromAlbum().initData().then(res => {
            let base64=res
          })

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 问题描述:鸿蒙Next如何实现打开相册选图片功能
  • 应用场景:用户个人中心自定义头像的时候,需要选择相册上传照片。
  • 解决方案:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档