99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

前言

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

實現(xiàn)效果

需求分析

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

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

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

申請權(quán)限方式

  1. 權(quán)限申請
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 可以臨時訪問系統(tǒng)存儲,不需要申請任何權(quán)限。更好的保護用戶隱私安全,這也是鴻蒙官方提倡使用的方式。

網(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. 保存圖片到相冊
/**
   * 保存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); // 獲取相冊管理模塊的實例
    const uri = await helper.createAsset(photoAccessHelper.PhotoType.IMAGE, 'jpg'); // 指定待創(chuàng)建的文件類型、后綴和創(chuà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)常會遇到需要保存指定樣式的布 View 為圖片。Android 中則需要使用 View 的繪制,將布局繪制出來后,再進行保存。但是在鴻蒙中實現(xià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é)

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

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

    關(guān)注

    12

    文章

    3973

    瀏覽量

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

    關(guān)注

    183

    文章

    2642

    瀏覽量

    68110
  • HarmonyOS
    +關(guān)注

    關(guān)注

    80

    文章

    2126

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

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

    HarmonyOS 5】鴻蒙應(yīng)用實現(xiàn)發(fā)票掃描、文檔掃描輸出PDF圖片或者表格的功能

    HarmonyOS 5】鴻蒙應(yīng)用實現(xiàn)發(fā)票掃描、文檔掃描輸出PDF圖片或者表格的功能 ##鴻蒙開發(fā)能力 ##HarmonyOS SDK應(yīng)用服務(wù)##鴻蒙金融類應(yīng)用 (金融理財# 、前言
    的頭像 發(fā)表于 07-11 18:16 ?286次閱讀
    【<b class='flag-5'>HarmonyOS</b> 5】鴻蒙應(yīng)用實現(xiàn)發(fā)票掃描、文檔掃描輸出PDF<b class='flag-5'>圖片</b>或者表格的功能

    如何實現(xiàn)組件截圖 -- componentSnapshot

    等,文字和圖片都是根據(jù)用戶信息動態(tài)生成的,整個證書在顯示的時候是通過Stack組件去完成的,如果只是在程序里顯示那么當然很簡單,但是還需要將其作為圖片保存
    發(fā)表于 06-30 17:45

    ##DevEco Studio##如何讓模擬器里有圖片?【圖片下載法】

    ? API9和API12在模擬器上,有個巨大的區(qū)別,那就是API9(開發(fā)工具3的版本),他的模擬器里有個拍照功能(再往前的版本里甚至還有瀏覽器,可以通過瀏覽器下載圖片),可以通過拍照功能讓
    發(fā)表于 06-29 22:51

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    一招治“浮”! 高精度3D線激光輪廓測量儀保障螺絲裝配

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

    存儲空間告急?NAS擴容一招搞定,輕松無憂!

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

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

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

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

    1、程序介紹本案例使用TextArea實現(xiàn)多文本輸入,使用mediaLibrary實現(xiàn)在相冊中獲取圖片,使用image生成pixelMap,使用pixelMap的scale(),crop
    的頭像 發(fā)表于 09-20 08:07 ?1319次閱讀
    基于ArkTS語言的OpenHarmony APP應(yīng)用開發(fā):<b class='flag-5'>圖片</b>處理