<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

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

3天內不再提示

HarmonyOS開發實例:【圖片編輯應用】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-23 09:42 ? 次閱讀

介紹

通過動態設置元素樣式的方式,實現幾種常見的圖片操作,包括裁剪、旋轉、縮放和鏡像。效果如圖所示:

相關概念

  • [image組件]:圖片組件,用來渲染展示圖片。
  • [div組件]:基礎容器組件,用作頁面結構的根節點或將內容進行分組。
  • [text組件]:文本組件,用于呈現一段信息。
  • [setstyle]:動態設置組件樣式的方法。

環境搭建

軟件要求

  • [DevEco Studio]版本:DevEco Studio 3.1 Release及以上版本。
  • OpenHarmony SDK版本:API version 9及以上版本。

硬件要求

  • 開發板類型:[潤和RK3568開發板]。
  • OpenHarmony系統:3.2 Release及以上版本。

環境搭建

完成本篇Codelab我們首先要完成開發環境的搭建,本示例以RK3568開發板為例,參照以下步驟進行:

  1. [獲取OpenHarmony系統版本]:標準系統解決方案(二進制)。以3.2 Release版本為例:
  2. 搭建燒錄環境。
    1. [完成DevEco Device Tool的安裝]
    2. [完成RK3568開發板的燒錄]
  3. 搭建開發環境。
    1. 開始前請參考[工具準備],完成DevEco Studio的安裝和開發環境配置。
    2. 開發環境配置完成后,請參考[使用工程向導]創建工程(模板選擇“Empty Ability”)。
    3. 工程創建完成后,選擇使用[真機進行調測]。
    4. 鴻蒙開發指導文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]

搜狗高速瀏覽器截圖20240326151344.png

代碼結構解讀

本篇Codelab只對核心代碼進行講解,對于完整代碼,我們會在gitee中提供。

HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿

├──entry/src/main/js	              // 代碼區
│  └──MainAbility
│     ├──common
│     │  ├──constants
│     │  │  └──commonConstants.js     // 公共數據常量
│     │  └──images
│     ├──i18n		                  // 中英文	
│     │  ├──en-US.json			
│     │  └──zh-CN.json			
│     └──pages
│        └──index
│           ├──index.css              // 首頁樣式文件	
│           ├──index.hml              // 首頁布局文件
│           └──index.js               // 首頁腳本文件
└──entry/src/main/resources           // 應用資源目錄

構建界面

本示例主界面由上至下分為三部分:頂部標題欄、中間圖片區域、底部操作欄。

標題欄中的元素呈水平分布,包含“返回”圖標、“編輯”標題和“保存”圖標。div容器內元素默認為水平分布,開發者將對應元素置于div容器組件中即可?!胺祷亍眻D標和“編輯”標題置于同一個子div容器中,組成一個新元素,與“保存”圖標分別置于父div容器的水平兩側。

< !-- index.hml -- >
< !-- 頂部標題欄 -- >
< div class="title-container" >
    < div >
        < image src="/common/images/ic_back.png" class="image-back" >< /image >
        < text class="title-text" >{{ $t('strings.edit') }}< /text >
    < /div >
    < image src="/common/images/ic_save.png" class="image-save" >< /image >
< /div >
/* index.css */
.title-container {
    justify-content: space-between;
    width: 100%;
    padding-top: 13vp;
    padding-left: 26vp;
    padding-bottom: 15vp;
    padding-right: 24vp;
}

圖片區域用于展示被編輯的圖片,使用div容器組件限定區域范圍。再通過設置樣式,使范圍內的圖片居中展示。圖片組件image設置object-fit屬性為contain,確保圖片保持寬高比縮放,并在區域內完整展示。

< !-- index.hml -- >
< !-- 圖片區域 -- >
< div class="image-container" >
    < image id="picture" src="/common/images/ic_meals.png" class="picture" >< /image >
< /div >
/* index.css */
.image-container {
    justify-content: center;
    width: 100%;
    height: 68%;
    flex-direction: column;
    align-items: center;
}

.picture {
    object-fit: contain;
}

操作欄包含裁剪、旋轉、縮放和鏡像四種常見操作按鈕。他們的布局和數據結構相同,可采用for循環的方式進行渲染。每個按鈕的圖標和文字都是垂直分布,也是通過設置對應樣式達到效果。

< !-- index.hml -- >
< !-- 操作欄 -- >
< div >
    < div class="button-container" for="item in buttonList" on:click="pictureManipulation({{ item.buttonType }})" >
        < image src="{{ item.src }}" class="button-icon" >
        < /image >
        < text class="operation-text" >{{ item.description }}< /text >
    < /div >
< /div >
/* index.css */
.button-icon {
    width: 27vp;
    height: 27vp;
    margin-left: 24vp;
    margin-right: 24vp;
    margin-top: 52vp;
    margin-bottom: 6vp;
}

.operation-text {
    font-size: 12fp;
    color: #182431;
}

.button-container {
    justify-content: center;
    flex-direction: column;
    align-items: center;
    width: 100%;
}

編輯圖片

使用指定元素的setStyle(name: string, value: string)方法,可以動態設置該元素樣式。當前示例正是基于此方式,實現了對圖片裁剪、旋轉、縮放以及鏡像操作。

  • 裁剪操作:使用clip-path樣式,設置組件的裁剪區域,只顯示區域內的部分,實現對圖片的裁剪操作。
  • 旋轉操作:使用transform動畫樣式,設置組件的旋轉動畫屬性,實現對圖片的旋轉操作。
  • 縮放操作:動態等比例設置組件寬、高屬性,實現對圖片的縮放操作。
  • 鏡像操作:使用transform動畫樣式,設置組件的Y軸方向旋轉動畫屬性,實現對圖片的旋轉操作。
// index.js
pictureManipulation(buttonType) {
  if (this.isCropped || this.isRotated || this.isZoomed || this.isMirror) {
    this.$element('picture').setStyle('clipPath', 'inset(0, 0, 0, 0');
    this.$element('picture').setStyle('transform', 'rotate(0)');
    this.$element('picture').setStyle('height', this.imageHeight);
    this.$element('picture').setStyle('width', this.imageWidth);
    this.$element('picture').setStyle('transform', 'rotateY(0)');
    this.degrees = 0;
    this.rotateY = 0;
    this.isCropped = false;
    this.isRotated = false;
    this.isZoomed = false;
    this.isMirror = false;
  } else {
    switch (buttonType) {
      case CommonConstants.OperationType.CROP:
        this.$element('picture')
          .setStyle('clipPath', 'inset(0, 0, ' + (this.imageHeight / CommonConstants.SPLIT_IN_HALF) + ', 0');
        this.isCropped = true;
        break;
      case CommonConstants.OperationType.ROTATE:
        this.degrees = this.degrees + CommonConstants.ROTATE_DEGREE;
        this.$element('picture').setStyle('transform', 'rotate(' + this.degrees + ')');
        this.isRotated = true;
        break;
      case CommonConstants.OperationType.ZOOM:
        this.$element('picture').setStyle('height', this.imageHeight / CommonConstants.SPLIT_IN_HALF);
        this.$element('picture').setStyle('width', this.imageWidth / CommonConstants.SPLIT_IN_HALF);
        this.isZoomed = true;
        break;
      case CommonConstants.OperationType.MIRROR:
        this.rotateY = this.rotateY + CommonConstants.ROTATE_Y;
        this.$element('picture').setStyle('transform', 'rotateY(' + this.rotateY + ')');
        this.isMirror = true;
        break;
      default:
        hilog.info(0x0000, 'ImageOperation', '%{public}s', 'Operation type is wrong!');
        break;
    }
  }
}

審核編輯 黃宇

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

    關注

    55

    文章

    1919

    瀏覽量

    42197
  • HarmonyOS
    +關注

    關注

    79

    文章

    1912

    瀏覽量

    29454
  • OpenHarmony
    +關注

    關注

    24

    文章

    3442

    瀏覽量

    15291
收藏 人收藏

    評論

    相關推薦

    HarmonyOS開發案例:【圖片編輯

    基于canvas組件、圖片編解碼,介紹了圖片編輯實現過程。
    的頭像 發表于 04-22 16:42 ?494次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發</b>案例:【<b class='flag-5'>圖片</b><b class='flag-5'>編輯</b>】

    HarmonyOS開發必備知識

    這篇文檔帶領大家掌握HarmonyOS開發的一些必備基礎知識:1、應用基礎知識;2、應用配置文件;3、資源文件;4、應用數據管理;5、應用權限管理注:文檔和視頻中所有的圖片及代碼截圖皆為示意圖,具體以
    發表于 09-10 17:39

    HarmonyOS WLAN開發指南

    這次給大家帶來的是HarmonyOS的WLAN開發文檔,這篇文檔主要包含以下知識:1、基礎功能;2、消息通知;3、P2P功能開發。注:文檔和視頻中所有的圖片及代碼截圖皆為示意圖,具體以
    發表于 09-10 17:51

    HarmonyOS應用開發-代碼編輯

    編輯器使用技巧DevEco Studio支持多種語言進行HarmonyOS應用的開發,包括Java、JS和C/C++。在編寫應用階段,您可以通過掌握各種代碼編寫的各種常用技巧,來提升編碼效率。代碼
    發表于 09-18 16:56

    HarmonyOS】應用開發文檔

    /basic-fundamentals-0000000000041611快速入門補充該實例在新建工程時需要選擇的設備類型和模板,避免開發者選擇錯誤https://developer.harmonyos.com/cn/docs/d
    發表于 10-14 18:04

    絕對干貨!HarmonyOS開發者日資料全公開,鴻蒙開發者都在看

    分享HarmonyOS三方庫,組件使用方法,如何貢獻組件。13、HarmonyOS 應用開發基礎 - Ability:該主題講解Ability的基本概念與開發
    發表于 08-04 14:36

    HarmonyOS教程—基于圖片處理能力,實現一個圖片編輯模板

    :界面UI和圖片編輯器。模板界面UI部分主要為開發者提供了:圖片編輯界面的設計參考,以及HarmonyO
    發表于 08-31 10:13

    華為開發HarmonyOS零基礎入門:Word圖片資源支持預覽效果

    華為開發HarmonyOS零基礎入門:Word圖片資源支持預覽效果,list主鍵函數可以做布局,呈現多個堆疊顯示效果。
    的頭像 發表于 10-23 10:12 ?1245次閱讀
    華為<b class='flag-5'>開發</b>者<b class='flag-5'>HarmonyOS</b>零基礎入門:Word<b class='flag-5'>圖片</b>資源支持預覽效果

    華為開發HarmonyOS零基礎入門:UI組件設計開發實踐

    華為開發HarmonyOS零基礎入門:UI組件設計開發實踐之圖庫應用介紹,應用數據加載顯示模型圖片加載渲染功能快速在其他應用上。
    的頭像 發表于 10-23 10:58 ?1474次閱讀
    華為<b class='flag-5'>開發</b>者<b class='flag-5'>HarmonyOS</b>零基礎入門:UI組件設計<b class='flag-5'>開發</b>實踐

    HarmonyOS Connect的智能硬件開發

    辦公、HMS Core 等熱門話題,與華為專家、行業大咖、全球開發者一起探討全場景智慧體驗的未來。 HarmonyOS Connect智能硬件開發 華為商城店鋪化運營:為伙伴提供品牌私域運營陣地和工具 直播間:http://t.
    的頭像 發表于 10-23 13:44 ?1987次閱讀
    <b class='flag-5'>HarmonyOS</b> Connect的智能硬件<b class='flag-5'>開發</b>

    華為開發者大會2021 HarmonyOS設計人因研究框架

    今天的2021華為開發者大會上,HarmonyOS面向超級終端UX設計上展示了HarmonyOS設計人因研究框架。 HDC分論壇-HarmonyOS面向超級終端UX設計推薦鏈接:htt
    的頭像 發表于 10-23 17:07 ?1359次閱讀
    華為<b class='flag-5'>開發</b>者大會2021 <b class='flag-5'>HarmonyOS</b>設計人因研究框架

    華為開發者分論壇HarmonyOS學生公開課-HarmonyOS的無限可能

    2021華為開發者分論壇HarmonyOS學生公開課-HarmonyOS的無限可能 ? 推薦鏈接:http://t.elecfans.com/live/1713.html 責任編輯:p
    的頭像 發表于 10-24 11:03 ?1267次閱讀
    華為<b class='flag-5'>開發</b>者分論壇<b class='flag-5'>HarmonyOS</b>學生公開課-<b class='flag-5'>HarmonyOS</b>的無限可能

    HarmonyOS開發:舒爾特方格游戲

    為豐富 HarmonyOS 對云端開發的支持、實現 HarmonyOS 生態端云聯動,DevEco Studio 推出了云開發功能,開發者在
    的頭像 發表于 06-19 15:05 ?549次閱讀
    <b class='flag-5'>HarmonyOS</b>云<b class='flag-5'>開發</b>:舒爾特方格游戲

    OpenHarmony上實現圖片編輯功能

    圖片編輯是在應用中經常用到的功能,比如相機拍完照片后可以對照片進行編輯;截圖后可以對截圖進行編輯;可以對圖庫中的圖片進行
    的頭像 發表于 06-25 15:17 ?856次閱讀
    OpenHarmony上實現<b class='flag-5'>圖片</b><b class='flag-5'>編輯</b>功能

    HarmonyOS開發案例:【圖片編輯

    基于ArkTS的聲明式開發范式的樣例,主要介紹了圖片編輯實現過程。
    的頭像 發表于 04-23 20:54 ?112次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發</b>案例:【<b class='flag-5'>圖片</b><b class='flag-5'>編輯</b>】
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>