91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

3天內不再提示

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

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

掃碼添加小助手

加入工程師交流群

前言

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

實現效果

需求分析

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

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

技術實現

申請權限方式

  1. 權限申請
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. 權限判斷
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)存儲,不需要申請任何權限。更好的保護用戶隱私安全,這也是鴻蒙官方提倡使用的方式。

網絡圖片保存

  1. 下載圖片,并將數據轉化為 ArrayBuffer 類型。
/**
   * 通過http的request方法從網絡下載圖片資源
   */
  static async getPicture(url:string) {
    http.createHttp()
      .request(url,
        (error: Error, data: http.HttpResponse) = > {
          if (error) {
            showShortCenterToast("圖片保存失敗")
            return;
          }
          // 判斷網絡獲取到的資源是否為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 中,經常會遇到需要保存指定樣式的布 View 為圖片。Android 中則需要使用 View 的繪制,將布局繪制出來后,再進行保存。但是在鴻蒙中實現起來就比較簡單。

** 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);
                  })
                })

總結

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

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

    關注

    12

    文章

    4023

    瀏覽量

    133957
  • 鴻蒙系統(tǒng)

    關注

    183

    文章

    2642

    瀏覽量

    69823
  • HarmonyOS
    +關注

    關注

    80

    文章

    2153

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    釘釘正式開源HarmonyOS圖片編輯組件

    近日,由釘釘團隊自主研發(fā)的“HarmonyOS圖片編輯組件”正式上線OpenHarmony三方庫中心倉并開源。作為款填補鴻蒙社區(qū)圖像處理領域空白的重量級組件,該方案基于HarmonyOS
    的頭像 發(fā)表于 01-05 09:58 ?491次閱讀

    從EMI超標輕松過檢,沃爾德軟橋為何成為工程師新寵?

    在電源設計領域,你是否經常遇到EMI問題的挑戰(zhàn)?傳統(tǒng)的整流橋在關斷時產生的震蕩不僅影響了效率,還增加了EMI抑制元件的成本。沃爾德半導體推出的軟橋系列,一招搞定難題!今天,我將帶你深入了解這款革命性產品的核心優(yōu)勢及其應用領域
    的頭像 發(fā)表于 12-24 17:50 ?600次閱讀
    從EMI超標<b class='flag-5'>到</b>輕松過檢,沃爾德軟橋為何成為工程師新寵?

    智能樓宇改造避坑指南:別再換掉所有老設備!一招搞定ETHERNET/IP轉DEVICENET的共存難題

    智能樓宇改造避坑指南:別再換掉所有老設備!一招搞定ETHERNET/IP轉DEVICENET的共存難題 1. 項目背景:老舊樓宇的智能化挑戰(zhàn) 在現代智能樓宇控制系統(tǒng)中,我們常面臨新舊設備混合的復雜
    的頭像 發(fā)表于 12-17 15:35 ?237次閱讀
    智能樓宇改造避坑指南:別再換掉所有老設備!<b class='flag-5'>一招</b><b class='flag-5'>搞定</b>ETHERNET/IP轉DEVICENET的共存難題

    電子產品散熱難題?Flotherm軟件一招搞定

    ——Flotherm! Flotherm 是款專業(yè)極致的電子系統(tǒng)散熱仿真軟件,在行業(yè)內堪稱 “扛把子”。它就像是位擁有超能力的虛擬工程師,利用先進的計算流體動力學(CFD)技術,結合數值傳熱學方法,能夠精準預測電子設備在
    的頭像 發(fā)表于 11-06 16:52 ?750次閱讀
    電子產品散熱難題?Flotherm軟件<b class='flag-5'>一招</b><b class='flag-5'>搞定</b>!

    基于開源鴻蒙的圖片編輯開發(fā)樣例(1)

    本期內容介紹基于開源鴻蒙在RK3568上開發(fā)圖片編輯樣例的全流程,分為上篇和下篇,本篇為上篇,主要介紹添加相冊圖片、編譯圖片功能。
    的頭像 發(fā)表于 10-31 09:16 ?3064次閱讀
    基于開源鴻蒙的<b class='flag-5'>圖片</b>編輯開發(fā)樣例(1)

    工業(yè)電路總出問題?檳城BMG10D系列壓敏復合器件:一招解決過壓難題

    ”。工業(yè)電路總出問題?檳城BMG10D系列壓敏復合器件:一招解決過壓難題。它從根源上保證了品質——原廠技術支持、穩(wěn)定供貨,不用擔心中間環(huán)節(jié)出岔子,買得放心,用得也踏
    的頭像 發(fā)表于 09-05 16:58 ?589次閱讀
    工業(yè)電路總出問題?檳城BMG10D系列壓敏復合器件:<b class='flag-5'>一招</b>解決過壓難題

    10個RTL優(yōu)化實戰(zhàn)技巧

    今天我給大家總結10個實戰(zhàn)級優(yōu)化技巧,每條都有具體案例,助你從根源上搞定資源問題!
    的頭像 發(fā)表于 07-21 15:01 ?851次閱讀

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

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

    如何實現組件截圖 -- componentSnapshot

    等,文字和圖片都是根據用戶信息動態(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 ?475次閱讀

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

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

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

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

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

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

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

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