饭宝 发表于 2024-9-19 16:54:07

HarmonyOS NEXT图片选择和下载保存案例

先容

本示例先容图片相关场景的使用:包罗访问手机相册图片、选择预览图片并显示选择的图片到当前页面,下载并保存网络图片得手机相册或到指定用户目录两个场景。
结果图预览


https://i-blog.csdnimg.cn/blog_migrate/75fcf8673d9a4518ca4d99db28e14844.gif
使用说明

[*]从主页通用场景集里选择图片选择和下载保存进入首页。
[*]分两个场景


[*]点击“+”进入”访问手机相册图片预览并选择”场景示例。
[*]点击上部“下载”按钮进入”下载网络图片得手机相册”场景示例;点击下部“下载到指定路径”按钮进入”下载文件到指定用户目录”场景示例。
实现思绪

场景1:访问手机相册图片预览并选择

通过photoViewPicker.select()拉起图库界面,用户可以预览并选择一个或多个文件,即可实现拉起手机相册并进行图片的预览与选择。

[*]创建文件范例为图片的,并最大预览数目为2的图库实例。
async getFileAssetsFromType(){
const photoSelectOptions = new picker.PhotoSelectOptions(); // 创建图库对象实例
photoSelectOptions.MIMEType = picker.PhotoViewMIMETypes.IMAGE_TYPE; // 选择媒体文件类型为Image
photoSelectOptions.maxSelectNumber = 2; // 选择媒体文件的最大数目
}
[*]通过photoViewPicker.select()接口,通过传入参数PhotoSaveOptions图库对象,获取返回的用户选择的图片信息。
async getFileAssetsFromType(){
    photoViewPicker.select(photoSelectOptions)
      .then((photoSelectResult) => {
      this.uris = photoSelectResult.photoUris; // select返回的uri权限是只读权限,需要将uri写入全局变量@State中即可根据结果集中的uri进行读取文件数据操作。
      })
      .catch((err: BusinessError) => {
       console.log('Invoke photoViewPicker.select failed, code is ${err.code},message is ${err.message}');
      })
} 场景2:下载并保存网络图片


[*]通过http中request方法获取在线图片数据。
http.createHttp()
.request('https://gitee.com/openharmony/applications_app_samples/raw/master/code/Solutions/Shopping/OrangeShopping/feature/navigationHome/src/main/resources/base/media/product002.png',
    (error: BusinessError, data: http.HttpResponse) => {
      if (error) {
      promptAction.showToast({
          message: $r('app.string.image_request_fail'),
          duration: 2000
      })
      return
      }
      this.transcodePixelMap(data);
      if (data.result instanceof ArrayBuffer) {
      this.imageBuffer = data.result as ArrayBuffer;
      }
    })
[*]使用createPixelMap方法将获取到的图片数据转换成pixelmap展示到页面中
// 将ArrayBuffer类型的图片装换为PixelMap类型
transcodePixelMap(data: http.HttpResponse) {
let code: http.ResponseCode | number = data.responseCode;
if (ResponseCode.ResponseCode.OK === code) {
    let imageData: ArrayBuffer = data.result as ArrayBuffer;
    let imageSource: image.ImageSource = image.createImageSource(imageData);

    class tmp {
      height: number = 100;
      width: number = 100;
    };

    let options: Record<string, number | boolean | tmp> = {
      'alphaType': 0, // 透明度
      'editable': false, // 是否可编辑
      'pixelFormat': 3, // 像素格式
      'scaleMode': 1, // 缩略值
      'size': { height: 100, width: 100 }
    }; // 创建图片大小

    imageSource.createPixelMap(options).then((pixelMap: PixelMap) => {
      this.image = pixelMap;
      this.isShow = true
    });
}
}
[*] 将图片保存到图库或者用户选择的路径

[*]使用getPhotoAccessHelper、createAsset、fs.open、fs.write等接口将数据存到本地图库中
async saveImage(buffer: ArrayBuffer | string): Promise<void> {
    let context = getContext(this) as common.UIAbilityContext;
    let helper = photoAccessHelper.getPhotoAccessHelper(context);
    let uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg');
    let file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    await fs.write(file.fd, buffer);
    await fs.close(file.fd);
}   

[*]使用photoViewPicker.save、fs.open、fs.write等接口将数据存到用户选择路径的数据库中
async pickerSave(buffer: ArrayBuffer | string): Promise<void> {
    const photoSaveOptions = new picker.PhotoSaveOptions(); // 创建文件管理器保存选项实例
    photoSaveOptions.newFileNames = ['PhotoViewPicker ' + new Date().getTime() + 'jpg'] // 保存文件名(可选)
    const photoViewPicker = new picker.PhotoViewPicker;
    photoViewPicker.save(photoSaveOptions)
      .then(async (photoSvaeResult) => {
      console.info('PhotoViewPicker.save successfully,photoSvaeResult uri:' + JSON.stringify(photoSvaeResult));
      let uri = photoSvaeResult;
      let file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
      await fs.write(file.fd, buffer);
      await fs.close(file.fd);
      promptAction.showToast({
          message: $r('app.string.image_request_success'),
          duration: 2000
      })
      })
}
高性能知识点

不涉及
工程结构&模块范例

picturemanage                                 // har类型
|---src/main/ets/components
|   |---SelectPictures.ets                      // 场景一:访问手机相册图片预览并选择
|   |---SaveNetWorkPictures.ets               // 场景二:下载网络图片并保存到手机相册或用户选择的文件夹
|   |---PictureManage.ets                     // 视图层-主页面,三个场景入口 模块依赖

依赖har包-common库中UX标准
最后:

有很多小同伴不知道学习哪些鸿蒙开辟技术?不知道需要重点掌握哪些鸿蒙应用开辟知识点?而且学习时频仍踩坑,最终浪费大量时间。以是有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有须要的。 
这份鸿蒙(HarmonyOS NEXT)资料包罗了鸿蒙开辟必掌握的核心知识要点,内容包罗了(ArkTS、ArkUI开辟组件、Stage模子、多端部署、分布式应用开辟、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开辟、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。
盼望这一份鸿蒙学习资料可以或许给各人带来帮助,有需要的小同伴自行领取,限时开源,先到先得~无套路领取!!
如果你是一名有经验的资深Android移动开辟、Java开辟、前端开辟、对鸿蒙感爱好以及转行人员,可以直接领取这份资料
 获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
鸿蒙(HarmonyOS NEXT)最新学习路线

https://i-blog.csdnimg.cn/blog_migrate/15a41c202968249002b9e71d35d047b0.png


[*]  HarmonOS基础技能
https://i-blog.csdnimg.cn/blog_migrate/d15791a8d9157b12cf470e6e20e199cd.png


[*]HarmonOS就业必备技能 https://i-blog.csdnimg.cn/blog_migrate/219a3f80b24947602f5ce80869c0f0d1.png
[*] HarmonOS多媒体技术
https://i-blog.csdnimg.cn/blog_migrate/f76470c4171a878d5f6071f6d009b828.png


[*]鸿蒙NaPi组件进阶
https://i-blog.csdnimg.cn/blog_migrate/8755cfeac3a887ec19fb168f7164234c.png


[*]HarmonOS高级技能
https://i-blog.csdnimg.cn/blog_migrate/1e210328c1ebf43f08d3b6c5f5c13b48.png


[*]初识HarmonOS内核 https://i-blog.csdnimg.cn/blog_migrate/24384aae472f78c055f7bf545467db7f.png
[*]实战就业级装备开辟
https://i-blog.csdnimg.cn/blog_migrate/9b0c4eb9a30ca059d28eceb4727b593e.png
 有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开辟入门教学视频,内容包罗:ArkTS、ArkUI、Web开辟、应用模子、资源分类…等知识点。
获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料
《鸿蒙 (OpenHarmony)开辟入门教学视频》

https://i-blog.csdnimg.cn/blog_migrate/9b893c2a4956d6ce72b63212f9216eab.png
《鸿蒙生态应用开辟V2.0白皮书》

https://i-blog.csdnimg.cn/blog_migrate/343917b8910aff13b48316fe3db39da6.jpeg
《鸿蒙 (OpenHarmony)开辟基础到实战手册》

OpenHarmony北向、南向开辟环境搭建
https://i-blog.csdnimg.cn/blog_migrate/2e05bbd2cb0f05ec297905ba57f803c2.png
 《鸿蒙开辟基础》



[*]ArkTS语言
[*]安装DevEco Studio
[*]运用你的第一个ArkTS应用
[*]ArkUI声明式UI开辟
[*].……
https://i-blog.csdnimg.cn/blog_migrate/48e16dbee395ba8de1264149330856d4.png
 《鸿蒙开辟进阶》



[*]Stage模子入门
[*]网络管理
[*]数据管理
[*]电话服务
[*]分布式应用开辟
[*]关照与窗口管理
[*]多媒体技术
[*]安全技能
[*]使命管理
[*]WebGL
[*]国际化开辟
[*]应用测试
[*]DFX面向未来计划
[*]鸿蒙系统移植和裁剪定制
[*]……
https://i-blog.csdnimg.cn/blog_migrate/adf72eca696abc1415cd768fceda1af7.png
《鸿蒙进阶实战》



[*]ArkTS实践
[*]UIAbility应用
[*]网络案例
[*]……
https://i-blog.csdnimg.cn/blog_migrate/c077a46bb540fc657713d99f39e9c74c.png
 获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料
总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对厘革,不断学习和提升本身,他们才气在这个厘革的期间中立于不败之地。 
https://i-blog.csdnimg.cn/blog_migrate/926f3f942f098baebec15ecf79df9ca9.png


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: HarmonyOS NEXT图片选择和下载保存案例