在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HarmonyOS實(shí)戰(zhàn):一招搞定保存圖片到相冊(cè)

尤楓 ? 來源:jf_54996641 ? 2025-06-24 17:04 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

保存圖片功能幾乎是每個(gè)應(yīng)用程序必備的功能之一,當(dāng)用戶遇到喜歡的圖片時(shí)可以保存到手機(jī)相冊(cè)。那么在鴻蒙中保存圖片是否也需要申請(qǐng)用戶存儲(chǔ)權(quán)限以及如何將圖片保存到相冊(cè),本文將詳細(xì)講述怎么保存網(wǎng)絡(luò)圖片,指定布局生成圖片保存至相冊(cè)的功能實(shí)現(xiàn)。

實(shí)現(xiàn)效果

需求分析

一般在 AndroidiOS 上保存圖片都需要申請(qǐng)應(yīng)用存儲(chǔ)權(quán)限,否則將禁止訪問應(yīng)用存儲(chǔ),不能保存圖片到磁盤中。在鴻蒙系統(tǒng)中當(dāng)然也有存儲(chǔ)權(quán)限,但是鴻蒙系統(tǒng)對(duì)于權(quán)限管理十分嚴(yán)格,一般情況下,禁止用戶申請(qǐng)?jiān)L問存儲(chǔ)權(quán)限。但是提供了系統(tǒng)級(jí)別的安全控件,不需要用戶手動(dòng)申請(qǐng)權(quán)限,用于存儲(chǔ)的直接訪問。

  1. 可以使用系統(tǒng)提供的安全控件實(shí)現(xiàn)權(quán)限的直接訪問。
  2. 同時(shí)也提供申請(qǐng)權(quán)限方式進(jìn)行存儲(chǔ)權(quán)限的訪問。
  3. 使用網(wǎng)絡(luò)請(qǐng)求將圖片轉(zhuǎn)成流,然后保存成圖片。

技術(shù)實(shí)現(xiàn)

申請(qǐng)權(quán)限方式

  1. 權(quán)限申請(qǐng)
const permissions: Array< Permissions > = [
  'ohos.permission.WRITE_IMAGEVIDEO'
];
const context = getContext(this) as common.UIAbilityContext;
const atManager = abilityAccessCtrl.createAtManager();
await atManager.requestPermissionsFromUser(context, permissions);
  1. 權(quán)限判斷
PermissionUtil.checkAccessToken(permissions[0]).then((status)= >{
            if (status == abilityAccessCtrl.GrantStatus.PERMISSION_GRANTED) {
              FileSaveManager.getPicture(this.imagePath)
            }else{
              PermissionUtil.openPermissionsInSystemSettings(getContext(this) as common.UIAbilityContext)
            }
   })

安全控件方式

SaveButton({ text: SaveDescription.SAVE_IMAGE, buttonType: ButtonType.Normal })
           .fontColor(Color.White)
           .fontWeight(FontWeight.Medium)
           .onClick(async (event: ClickEvent, result: SaveButtonOnClickResult) = > {
             if (result == SaveButtonOnClickResult.SUCCESS) {
               try {
                 this.saveImage()
               } catch (error) {
                 console.error("error is " + JSON.stringify(error));
               }
             }
           })

可以看出通過系統(tǒng)安全控件 SaveButton 可以臨時(shí)訪問系統(tǒng)存儲(chǔ),不需要申請(qǐng)任何權(quán)限。更好的保護(hù)用戶隱私安全,這也是鴻蒙官方提倡使用的方式。

網(wǎng)絡(luò)圖片保存

  1. 下載圖片,并將數(shù)據(jù)轉(zhuǎn)化為 ArrayBuffer 類型。
/**
   * 通過http的request方法從網(wǎng)絡(luò)下載圖片資源
   */
  static async getPicture(url:string) {
    http.createHttp()
      .request(url,
        (error: Error, data: http.HttpResponse) = > {
          if (error) {
            showShortCenterToast("圖片保存失敗")
            return;
          }
          // 判斷網(wǎng)絡(luò)獲取到的資源是否為ArrayBuffer類型
          if (data.result instanceof ArrayBuffer) {
            FileSaveManager.saveImageToPhoto(data.result as ArrayBuffer)
          }
        }
      )
  }
  1. 保存圖片到相冊(cè)
/**
   * 保存ArrayBuffer到圖庫
   * @param buffer:圖片ArrayBuffer
   * @returns
   */
  static async saveImageToPhoto(buffer: ArrayBuffer | string): Promise< void > {
    const context = getContext() as common.UIAbilityContext; // 獲取getPhotoAccessHelper需要的context
    const helper = photoAccessHelper.getPhotoAccessHelper(context); // 獲取相冊(cè)管理模塊的實(shí)例
    const uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg'); // 指定待創(chuàng)建的文件類型、后綴和創(chuàng)建選項(xiàng),創(chuàng)建圖片或視頻資源
    const file = await fs.open(uri, fs.OpenMode.READ_WRITE | fs.OpenMode.CREATE);
    let r =  await fs.write(file.fd, buffer);
    await fs.close(file.fd);
    showShortCenterToast("圖片保存成功")
  }

指定布局保存

在 Android 或 iOS 中,經(jīng)常會(huì)遇到需要保存指定樣式的布 View 為圖片。Android 中則需要使用 View 的繪制,將布局繪制出來后,再進(jìn)行保存。但是在鴻蒙中實(shí)現(xiàn)起來就比較簡(jiǎn)單。

** 1. 將需要保存的 View 布局指定 Id。**

Column() {
    //布局樣式
  } 
.id("root")
  1. 通過 id 將 View 保存成圖片。
componentSnapshot.get("photo", (error: Error, pixmap: image.PixelMap) = > {
                  if (error) {
                    console.log("error: " + JSON.stringify(error))
                    return;
                  }
                  const  packOpts : image.PackingOption = { format:"image/jpeg", quality:98 };
                  imagePackerApi.packing(pixmap, packOpts).then( async (data : ArrayBuffer) = > {
                    FileSaveManager.saveImageToPhoto(data)
                  }).catch((error : BusinessError) = > {
                    console.error('Failed to pack the image. And the error is: ' + error);
                  })
                })

總結(jié)

對(duì)比 Android 或 iOS 來說,鴻蒙在實(shí)現(xiàn)功能上相對(duì)簡(jiǎn)單,比較容易上手。但是鴻蒙對(duì)于用戶權(quán)限的獲取要求比較嚴(yán)格,正式上線一般都需要使用系統(tǒng)提供的安全組件訪問應(yīng)用程序的相冊(cè)或存儲(chǔ),日常開發(fā)中需要十分注意,以免影響項(xiàng)目的正常上線。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • Android
    +關(guān)注

    關(guān)注

    12

    文章

    3971

    瀏覽量

    129883
  • 鴻蒙系統(tǒng)
    +關(guān)注

    關(guān)注

    183

    文章

    2642

    瀏覽量

    67887
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2146

    瀏覽量

    32493
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    harmony-utils之PickerUtil,拍照、文件選擇和保存,工具類

    harmony-utils之PickerUtil,拍照、文件選擇和保存,工具類 harmony-utils 簡(jiǎn)介與說明 harmony-utils 款功能豐富且極易上手的HarmonyOS工具庫
    的頭像 發(fā)表于 06-27 16:03 ?7次閱讀

    鴻蒙5開發(fā)寶藏案例分享---AI輔助圖文內(nèi)容高效編創(chuàng)

    鴻蒙寶藏案例:AI圖文編創(chuàng)開發(fā)實(shí)戰(zhàn),讓你的應(yīng)用更智能! 還在為HarmonyOS開發(fā)找不到優(yōu)質(zhì)案例發(fā)愁?今天分享個(gè)超實(shí)用的AI圖文編創(chuàng)場(chǎng)景實(shí)現(xiàn)方案,手把手教你打造智能社交通訊應(yīng)用!
    發(fā)表于 06-12 11:40

    HarmonyOS實(shí)戰(zhàn)一招解決等待多個(gè)并發(fā)結(jié)果

    前言 年前公司與華為簽訂了合作備忘錄,加入了鴻蒙生態(tài)這個(gè)大家庭。。公司想趕著鴻蒙純血系統(tǒng)上市之前,發(fā)布自己的鴻蒙軟件。開發(fā)鴻蒙NEXT版本軟件就變成了今年的個(gè)工作重心。 ** 本文主要
    的頭像 發(fā)表于 06-09 14:57 ?89次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>實(shí)戰(zhàn)</b>:<b class='flag-5'>一招</b>解決等待多個(gè)并發(fā)結(jié)果

    鴻蒙5開發(fā)寶藏案例分享---多開發(fā)實(shí)例(圖片美化)

    ?【鴻蒙開發(fā)寶藏案例分享】搞定多端適配的圖片美化應(yīng)用開發(fā)思路!? Hey小伙伴們~ 今天在翻鴻蒙文檔時(shí)挖到個(gè)超實(shí)用的大寶藏!原來官方早就悄悄提供了超多\"
    發(fā)表于 06-03 16:09

    本地服務(wù)器部署怎么選?一招搞定企業(yè)IT成本、性能與安全問題!

    在數(shù)字化時(shí)代,服務(wù)器已經(jīng)成了企業(yè)的“神經(jīng)中樞”。無論是ERP系統(tǒng)、財(cái)務(wù)數(shù)據(jù)庫、視頻監(jiān)控、郵件系統(tǒng),還是整套OA辦公系統(tǒng),都要靠它來穩(wěn)定運(yùn)行。尤其對(duì)很多中小企業(yè)來說,面對(duì)“上云”還是“自建”的爭(zhēng)論
    的頭像 發(fā)表于 05-26 13:07 ?141次閱讀
    本地服務(wù)器部署怎么選?<b class='flag-5'>一招</b><b class='flag-5'>搞定</b>企業(yè)IT成本、性能與安全問題!

    移動(dòng)電源EMC整改:認(rèn)證失敗次通過的實(shí)戰(zhàn)經(jīng)驗(yàn)

    深圳南柯電子|移動(dòng)電源EMC整改:認(rèn)證失敗次通過的實(shí)戰(zhàn)經(jīng)驗(yàn)
    的頭像 發(fā)表于 05-26 11:25 ?141次閱讀
    移動(dòng)電源EMC整改:認(rèn)證失敗<b class='flag-5'>到</b><b class='flag-5'>一</b>次通過的<b class='flag-5'>實(shí)戰(zhàn)</b>經(jīng)驗(yàn)

    鴻蒙開發(fā)實(shí)現(xiàn)圖片上傳(上傳用戶頭像)

    應(yīng)用場(chǎng)景: 選擇圖片 1.1. 添加圖片相冊(cè)中 默認(rèn)的相冊(cè)中無法添加圖片:windows 模擬
    發(fā)表于 05-24 23:09

    基于STM32F103RC的電子相冊(cè)(原理圖、PCB源文件、程序源碼及制作)

    基于STM32F103RC的電子相冊(cè)(原理圖、PCB源文件、程序源碼及制作) 項(xiàng)目示例下載! 純分享帖,需要者可點(diǎn)擊附件免費(fèi)獲取完整資料~~~【免責(zé)聲明】本文系網(wǎng)絡(luò)轉(zhuǎn)載,版權(quán)歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權(quán)問題,請(qǐng)第
    發(fā)表于 05-23 20:40

    爬蟲數(shù)據(jù)獲取實(shí)戰(zhàn)指南:從入門高效采集

    爬蟲數(shù)據(jù)獲取實(shí)戰(zhàn)指南:從入門高效采集 ? ? 在數(shù)字化浪潮中,數(shù)據(jù)已成為驅(qū)動(dòng)商業(yè)增長(zhǎng)的核心引擎。無論是市場(chǎng)趨勢(shì)洞察、競(jìng)品動(dòng)態(tài)追蹤,還是用戶行為分析,爬蟲技術(shù)都能助你快速捕獲目標(biāo)信息。然而,如何既
    的頭像 發(fā)表于 03-24 14:08 ?556次閱讀

    瓶蓋產(chǎn)線效率低、廢品多?阿童木 900E 一招搞定

    、項(xiàng)目背景在現(xiàn)代化的生產(chǎn)制造中,瓶蓋生成產(chǎn)線對(duì)于產(chǎn)品質(zhì)量把控有著極高要求。瓶蓋鋁箔墊片的入墊環(huán)節(jié),墊片數(shù)量的準(zhǔn)確性直接影響產(chǎn)品的密封性與品質(zhì),絕不允許出現(xiàn)疊片現(xiàn)象,否則會(huì)導(dǎo)致產(chǎn)品泄漏、變質(zhì)等
    的頭像 發(fā)表于 02-11 13:46 ?393次閱讀
    瓶蓋產(chǎn)線效率低、廢品多?阿童木 900E <b class='flag-5'>一招</b><b class='flag-5'>搞定</b>

    一招治“浮”! 高精度3D線激光輪廓測(cè)量?jī)x保障螺絲裝配

    浮高產(chǎn)生的系列問題,都將對(duì)機(jī)器的安全運(yùn)行埋下隱患。 各類因素產(chǎn)生的螺絲浮高 GL-8000系列 為您一招治“浮” 螺絲浮高檢測(cè)案例 01 檢測(cè)需求 1.次性掃描檢測(cè)4個(gè)螺絲的高度差 2.精度要求0.03-0.05mm 3.速
    的頭像 發(fā)表于 02-06 18:15 ?505次閱讀
    <b class='flag-5'>一招</b>治“浮”! 高精度3D線激光輪廓測(cè)量?jī)x保障螺絲裝配

    存儲(chǔ)空間告急?NAS擴(kuò)容一招搞定,輕松無憂!

    和vlog …… 這些點(diǎn)點(diǎn)滴滴 都是我們共同走過2024年的珍貴憑證 當(dāng)硬盤的進(jìn)度條漸漸變紅 仿佛在向我們展示這年來滿滿的收獲 但存儲(chǔ)空間緊急告急怎么辦? NAS擴(kuò)容一招搞定 、陣
    的頭像 發(fā)表于 12-24 16:35 ?614次閱讀
    存儲(chǔ)空間告急?NAS擴(kuò)容<b class='flag-5'>一招</b><b class='flag-5'>搞定</b>,輕松無憂!

    Air780E模組LuatOS開發(fā)實(shí)戰(zhàn) —— 手把手教你搞定數(shù)據(jù)打包解包

    本文要說的是低功耗4G模組Air780E的LuatOS開發(fā)實(shí)戰(zhàn),我將手把手教你搞定數(shù)據(jù)打包解包。
    的頭像 發(fā)表于 12-03 11:17 ?593次閱讀
    Air780E模組LuatOS開發(fā)<b class='flag-5'>實(shí)戰(zhàn)</b> —— 手把手教你<b class='flag-5'>搞定</b>數(shù)據(jù)打包解包

    A0A4的圖框只要個(gè)圖紙模板就搞定了?

    種非常靈活的管理方式,只需要個(gè)圖紙模板就可以搞定不同尺寸的場(chǎng)景。 ? ” 圖紙模板的組成 圖紙模板是由以下基本對(duì)象組成的: 直線 矩形 文本(包括普通字符串以及文本變量,或者系統(tǒng)自帶的特殊字符串) 多邊形 圖片(比如公司Log
    的頭像 發(fā)表于 11-13 18:13 ?1440次閱讀
    A0<b class='flag-5'>到</b>A4的圖框只要<b class='flag-5'>一</b>個(gè)圖紙模板就<b class='flag-5'>搞定</b>了?

    基于ArkTS語言的OpenHarmony APP應(yīng)用開發(fā):圖片處理

    1、程序介紹本案例使用TextArea實(shí)現(xiàn)多文本輸入,使用mediaLibrary實(shí)現(xiàn)在相冊(cè)中獲取圖片,使用image生成pixelMap,使用pixelMap的scale(),crop
    的頭像 發(fā)表于 09-20 08:07 ?1266次閱讀
    基于ArkTS語言的OpenHarmony APP應(yīng)用開發(fā):<b class='flag-5'>圖片</b>處理
    主站蜘蛛池模板: 特黄特黄aaaa级毛片免费看 | 第四色亚洲| 激情网址在线观看 | 牛牛a级毛片在线播放 | 中文字幕在线播放第一页 | 大学生一级特黄的免费大片视频 | 日本人亚洲人成人 | 在线播放交视频 | 一区二区三区伦理高清 | 天天摸天天做天天爽天天弄 | 久久99久久精品国产只有 | 免费理论片在线观看播放 | 黄 色 大 片 网站 | 国产精品片 | 国产精品高清久久久久久久 | 窝窝视频成人影院午夜在线 | 亚洲一卡二卡三卡 | 欧美一欧美一区二三区性 | 男人天堂资源站 | 激情视频综合网 | 永久黄网站色视频免费观看 | 2021年最热新版天堂资源中文 | 在线播放你懂得 | 免费视频久久看 | 亚洲国产成a人v在线观看 | 在线观看一级片 | 亚洲欧美日韩动漫 | 国产成年网站v片在线观看 国产成人91青青草原精品 | 手机看片三级 | 国产破苞合集 magnet | 日本三级成人中文字幕乱码 | 久久99精品久久久久久臀蜜桃 | 天天影视网天天影网 | 一级毛片一级黄片 | 国产午夜精品福利久久 | 中文字幕一区二区三区 精品 | 成熟女人免费一级毛片 | 天天摸日日碰天天看免费 | 网色| 国产精品久久在线 | 日韩dv |