RM新时代网站-首页

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

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

3天內不再提示

HarmonyOS開發(fā)實例:【圖片編輯應用】

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

介紹

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

相關概念

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

環(huán)境搭建

軟件要求

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

硬件要求

  • 開發(fā)板類型:[潤和RK3568開發(fā)板]。
  • OpenHarmony系統(tǒng):3.2 Release及以上版本。

環(huán)境搭建

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

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

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

代碼結構解讀

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

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

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

構建界面

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

標題欄中的元素呈水平分布,包含“返回”圖標、“編輯”標題和“保存”圖標。div容器內元素默認為水平分布,開發(fā)者將對應元素置于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;
}

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

< !-- index.hml -- >
< !-- 圖片區(qū)域 -- >
< 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;
}

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

< !-- 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)方法,可以動態(tài)設置該元素樣式。當前示例正是基于此方式,實現(xiàn)了對圖片裁剪、旋轉、縮放以及鏡像操作。

  • 裁剪操作:使用clip-path樣式,設置組件的裁剪區(qū)域,只顯示區(qū)域內的部分,實現(xiàn)對圖片的裁剪操作。
  • 旋轉操作:使用transform動畫樣式,設置組件的旋轉動畫屬性,實現(xiàn)對圖片的旋轉操作。
  • 縮放操作:動態(tài)等比例設置組件寬、高屬性,實現(xiàn)對圖片的縮放操作。
  • 鏡像操作:使用transform動畫樣式,設置組件的Y軸方向旋轉動畫屬性,實現(xiàn)對圖片的旋轉操作。
// 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;
    }
  }
}

審核編輯 黃宇

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

    關注

    57

    文章

    2339

    瀏覽量

    42805
  • HarmonyOS
    +關注

    關注

    79

    文章

    1973

    瀏覽量

    30143
  • OpenHarmony
    +關注

    關注

    25

    文章

    3713

    瀏覽量

    16254
收藏 人收藏

    評論

    相關推薦

    HarmonyOS開發(fā)案例:【圖片編輯

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

    HarmonyOS應用開發(fā)-代碼編輯

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

    HarmonyOS】應用開發(fā)文檔

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

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

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

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

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

    HarmonyOS資料下載專題

    HarmonyOS資料下載專題:從鴻蒙出世到現(xiàn)在,對于鴻蒙資料查詢下載,大家是否有點迷茫-不知去何處查找。為此,本專題匯集了HarmonyOS從入門到精通的各種開發(fā)資料,內容包括:設計參考、程序源碼、
    發(fā)表于 10-08 14:23
    <b class='flag-5'>HarmonyOS</b>資料下載專題

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

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

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

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

    HarmonyOS Connect的智能硬件開發(fā)

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

    HarmonyOS面向超級終端UX設計HarmonyOS設計指南

    今天的2021華為開發(fā)者大會上,HarmonyOS面向超級終端UX設計上展示了HarmonyOS設計指南。 HarmonyOS設計指南包括通用設計指南、設備設計指南、
    的頭像 發(fā)表于 10-23 15:13 ?1567次閱讀
    <b class='flag-5'>HarmonyOS</b>面向超級終端UX設計<b class='flag-5'>HarmonyOS</b>設計指南

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

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

    華為開發(fā)者分論壇HarmonyOS學生公開課-如何學習HarmonyOS應用開發(fā)?

    2021華為開發(fā)者分論壇HarmonyOS學生公開課-如何學習HarmonyOS應用開發(fā)?
    的頭像 發(fā)表于 10-24 11:09 ?2131次閱讀
    華為<b class='flag-5'>開發(fā)</b>者分論壇<b class='flag-5'>HarmonyOS</b>學生公開課-如何學習<b class='flag-5'>HarmonyOS</b>應用<b class='flag-5'>開發(fā)</b>?

    面向HarmonyOS開發(fā)者的HarmonyOS 3.0 Beta介紹

    2021年10月,我們面向開發(fā)者發(fā)布了HarmonyOS 3.0 Developer Preview版,但開發(fā)的腳步永不停歇,現(xiàn)在我們又更新了API版本,配套發(fā)布了HarmonyOS
    的頭像 發(fā)表于 07-06 20:34 ?3296次閱讀

    OpenHarmony上實現(xiàn)圖片編輯功能

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

    HarmonyOS開發(fā)案例:【圖片編輯

    基于ArkTS的聲明式開發(fā)范式的樣例,主要介紹了圖片編輯實現(xiàn)過程。
    的頭像 發(fā)表于 04-23 20:54 ?386次閱讀
    <b class='flag-5'>HarmonyOS</b><b class='flag-5'>開發(fā)</b>案例:【<b class='flag-5'>圖片</b><b class='flag-5'>編輯</b>】
    RM新时代网站-首页