一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲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ī)問題,請聯(lián)系本站處理。 舉報投訴
  • Android
    +關注

    關注

    12

    文章

    3971

    瀏覽量

    129891
  • 鴻蒙系統(tǒng)

    關注

    183

    文章

    2642

    瀏覽量

    67892
  • HarmonyOS
    +關注

    關注

    80

    文章

    2146

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

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

    前言 年前公司與華為簽訂了合作備忘錄,加入了鴻蒙生態(tài)這個大家庭。。公司想趕著鴻蒙純血系統(tǒng)上市之前,發(fā)布自己的鴻蒙軟件。開發(fā)鴻蒙NEXT版本軟件就變成了今年的個工作重心。 ** 本文主要
    的頭像 發(fā)表于 06-09 14:57 ?89次閱讀
    <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

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

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

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

    深圳南柯電子|移動電源EMC整改:認證失敗次通過的實戰(zhàn)經驗
    的頭像 發(fā)表于 05-26 11:25 ?144次閱讀
    移動電源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

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

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

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

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

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

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

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

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

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

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

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

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

    A0A4的圖框只要個圖紙模板就搞定了?

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

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

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