HarmonyOS 鸿蒙Next最全相机、相册开发技术帖

发布于 1周前 作者 gougou168 最后一次编辑是 5天前 来自 鸿蒙OS

希望汇总收集鸿蒙next最全面的相机,相册开发相关技术在本贴 1、打开相册功能 问题描述:鸿蒙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
  })
  

更多关于HarmonyOS 鸿蒙Next最全相机、相册开发技术帖的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next最全相机、相册开发技术帖的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


HarmonyOS 鸿蒙Next相机与相册开发技术要点:

  1. 相机开发

    • 使用CameraKit进行相机管理,包括预览、拍照、录像等功能。
    • 配置CameraCaptureSession进行图像捕获,处理图像数据。
    • 实现相机权限申请与动态权限管理,确保应用合规使用相机功能。
    • 自定义相机界面,通过SurfaceView或TextureView展示相机预览。
  2. 相册开发

    • 调用MediaStore API访问设备存储中的图片和视频资源。
    • 使用ContentResolver查询相册内容,支持按时间、类型等条件筛选。
    • 实现图片和视频资源的预览、编辑(如裁剪、旋转)功能。
    • 支持多选、删除、分享等相册常用操作。
    • 注意处理媒体文件的访问权限,确保用户隐私安全。
  3. 性能优化

    • 针对相机预览和图像处理进行性能调优,减少资源占用和功耗。
    • 优化相册加载速度,使用分页加载、缓存等技术提升用户体验。
    • 处理异常情况,如相机不可用、存储访问失败等,提供用户友好的提示信息。
  4. 兼容性

    • 适配不同分辨率和性能的设备,确保相机和相册功能在不同设备上的稳定性。
    • 遵循HarmonyOS的设计规范和API标准,确保应用的兼容性和可升级性。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部