写点什么

harmony-utils 之 PhotoHelper,相册相关工具类

  • 2025-06-26
    安徽
  • 本文字数:3328 字

    阅读完需:约 11 分钟

harmony-utils 之 PhotoHelper,相册相关工具类

harmony-utils 简介与说明



harmony-utils 一款功能丰富且极易上手的 HarmonyOS 工具库,借助众多实用工具类,致力于助力开发者迅速构建鸿蒙应用。其封装的工具涵盖了 APP、设备、屏幕、授权、通知、线程间通信、弹框、吐司、生物认证、用户首选项、拍照、相册、扫码、文件、日志,异常捕获、字符、字符串、数字、集合、日期、随机、base64、加密、解密、JSON 等一系列的功能和操作,能够满足各种不同的开发需求。


picker_utils 是 harmony-utils 拆分出来的一个子库,包含 PickerUtil、PhotoHelper、ScanUtil。


下载安装


ohpm i @pura/harmony-utils


ohpm i @pura/picker_utils


  //全局初始化方法,在UIAbility的onCreate方法中初始化 AppUtil.init()  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {    AppUtil.init(this.context);  }
复制代码

API 方法与使用


select 通过选择模式拉起 photoPicker 界面,用户可以选择一个或多个图片/视频
//相册选择图片PhotoHelper.select().then((result) => {  let uris = result.photoUris;  let uriStr = `调用相册,返回uris:\n${uris.join('\n')}`;}).catch((err: BusinessError) => {  let str = `调用相册,异常:\n${JSON.stringify(err)}`;});
复制代码
selectEasy 通过选择模式拉起 photoPicker 界面,用户可以选择一个或多个图片/视频
//相册选择图片/视频(多选)let options: photoAccessHelper.PhotoSelectOptions = {  MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_VIDEO_TYPE,  maxSelectNumber: 12,  isPhotoTakingSupported: false,  isSearchSupported: false,  isEditSupported: false,  isOriginalSupported: true}PhotoHelper.selectEasy(options).then((uris) => {  let uriStr = `调用相册,返回uris:\n${uris.join('\n')}`;}).catch((err: BusinessError) => {  let str = `调用相册,异常:\n${JSON.stringify(err)}`;}); //相册选择图片(单选)let options: photoAccessHelper.PhotoSelectOptions = {  MIMEType: photoAccessHelper.PhotoViewMIMETypes.IMAGE_TYPE,  maxSelectNumber: 1,  isOriginalSupported: true,  isPreviewForSingleSelectionSupported: true //单选模式下是否需要进大图预览}PhotoHelper.selectEasy(options).then((uris) => {  let uriStr = `调用相册,返回uris:\n${uris.join('\n')}`;}).catch((err: BusinessError) => {  let str = `调用相册,异常:\n${JSON.stringify(err)}`;});
复制代码
save 申请权限保存,保存图片或视频到相册
//图片保存进相册(已申请权限使用该方法)let ps: Permissions[] = ['ohos.permission.WRITE_IMAGEVIDEO'];PermissionUtil.requestPermissions(ps).then((result) => {  if (result) {    let imgName = `测试图片_${DateUtil.getTodayTime()}`;    PhotoHelper.save(photoAccessHelper.PhotoType.IMAGE, 'jpg', { title: imgName }).then(async (uri) => {      if (uri) {        let uriStr = `保存图片成功,返回uris:\n${uri}`;        let file = FileUtil.openSync(uri);        FileUtil.copyFile(this.filePath, file.fd).then(() => {          FileUtil.close(file.fd);          ToastUtil.showToast("图片保存成功");        })      }    }).catch((err: BusinessError) => {      let str = `调用保存图片,异常:\n${JSON.stringify(err)}`;    })  } else {    ToastUtil.showLong("请在设置中打开权限");    WantUtil.toAppSetting();  }});
复制代码
showAssetsCreationDialog 弹窗授权保存,调用接口拉起保存确认弹窗
let pixelMap = await ImageUtil.getPixelMapFromMedia($r("app.media.test_as4"));let filePath = await ImageUtil.savePixelMap(pixelMap, FileUtil.getFilesDirPath(""), "测试图片.png");let uri = FileUtil.getUriFromPath(this.filePath);let srcFileUris: Array<string>=[uri];
let desFileUris: Array<string> = await PhotoHelper.showAssetsCreationDialog(srcFileUris);for (let index = 0; index < desFileUris.length; index++) { //将来源于应用沙箱的照片内容写入媒体库的目标uri let srcFile: fs.File = await Utils.open(srcFileUris[index], fs.OpenMode.READ_ONLY); let desFile: fs.File = await Utils.open(desFileUris[index], fs.OpenMode.WRITE_ONLY); await Utils.copyFile(srcFile.fd, desFile.fd); await Utils.close(srcFile); await Utils.close(desFile);}
复制代码
showAssetsCreationDialogEasy 弹窗授权保存,调用接口拉起保存确认弹窗,并保存
let pixelMap = await ImageUtil.getPixelMapFromMedia($r("app.media.test_as4"));let filePath = await ImageUtil.savePixelMap(pixelMap, FileUtil.getFilesDirPath(""), "测试图片.png");let uri = FileUtil.getUriFromPath(this.filePath);
PhotoHelper.showAssetsCreationDialogEasy([uri, uri2]).then((result) => { let uriStr = `图片保存成功,返回uris:\n${JSON.stringify(result, null, 2)}`; DialogHelper.showToast("图片保存成功!");}).catch((error: BusinessError) => { DialogHelper.showToast("图片保存失败!");});
复制代码
applyChanges 安全控件保存,提交媒体变更请求,插入图片/视频
//安全控件保存,图片保存进相册。let pixelMap = await ImageUtil.getPixelMapFromMedia($r("app.media.test_as4"));let filePath = await ImageUtil.savePixelMap(pixelMap, FileUtil.getFilesDirPath(""), "测试图片.png");
let uri = FileUtil.getUriFromPath(this.filePath);PhotoHelper.applyChanges(uri).then((result) => { let uriStr = `保存图片成功:${result.uri}`;}).catch((err: BusinessError) => { let str = `保存图片失败:${JSON.stringify(err)}`;});
复制代码
getPhotoAsset 获取对应 uri 的 PhotoAsset 对象,用于读取文件信息
PickerUtil.selectPhoto().then(async (uris) => {  if (uris && uris.length > 0) {    PhotoHelper.getPhotoAsset(uris[0]).then((photoAsset) => {      try {        let name = photoAsset?.get(photoAccessHelper.PhotoKeys.DISPLAY_NAME);        let type = photoAsset?.get(photoAccessHelper.PhotoKeys.PHOTO_TYPE);        let title = photoAsset?.get(photoAccessHelper.PhotoKeys.TITLE.toString());        let size = photoAsset?.get(photoAccessHelper.PhotoKeys.SIZE.toString());        let with1 = photoAsset?.get(photoAccessHelper.PhotoKeys.WIDTH.toString());        let height = photoAsset?.get(photoAccessHelper.PhotoKeys.HEIGHT.toString());        let date = photoAsset?.get(photoAccessHelper.PhotoKeys.DATE_TAKEN.toString());        let orientation = photoAsset?.get(photoAccessHelper.PhotoKeys.ORIENTATION.toString());        let uriStr = `图片信息:\n文件名:${name}\n文件类型:${type}\n文件大小:${size}\n图片宽度:${with1}\n图片高度:${height}\n拍摄日期:${date}\n文件标题:${title}\n图片文件的方向:${orientation}`      } catch (err) {        LogUtil.error("读取图片信息失败:" + JSON.stringify(err));      }      photoAsset?.getThumbnail((err, pixelMap) => {        if (err) {          LogUtil.error("缩略图-异常:" + JSON.stringify(err));          return;        }        // this.pixelMap = pixelMap;      })    }).catch((err: BusinessError) => {      let str = `读取图片异常:\n${JSON.stringify(err)}`;    });  } else {    ToastUtil.showToast("请选择图片");  }}).catch((err: BusinessError) => {  let str = `异常:\n${JSON.stringify(err)}`;});
复制代码

创作不易,请给童长老点赞👍



https://github.com/787107497/harmony-utils


https://gitee.com/tongyuyan/harmony-utils


OpenHarmony三方库


童长老CSDN博客

用户头像

还未添加个人签名 2025-05-14 加入

还未添加个人简介

评论

发布
暂无评论
harmony-utils之PhotoHelper,相册相关工具类_HarmonyOS_桃花镇童长老_InfoQ写作社区