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

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

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

HarmonyOS開發(fā)實(shí)例:【圖片編輯應(yīng)用】

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

介紹

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

相關(guān)概念

  • [image組件]:圖片組件,用來渲染展示圖片。
  • [div組件]:基礎(chǔ)容器組件,用作頁(yè)面結(jié)構(gòu)的根節(jié)點(diǎn)或?qū)?nèi)容進(jìn)行分組。
  • [text組件]:文本組件,用于呈現(xiàn)一段信息。
  • [setstyle]:動(dòng)態(tài)設(shè)置組件樣式的方法。

環(huán)境搭建

軟件要求

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

硬件要求

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

環(huán)境搭建

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

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

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

代碼結(jié)構(gòu)解讀

本篇Codelab只對(duì)核心代碼進(jìn)行講解,對(duì)于完整代碼,我們會(huì)在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              // 首頁(yè)樣式文件	
│           ├──index.hml              // 首頁(yè)布局文件
│           └──index.js               // 首頁(yè)腳本文件
└──entry/src/main/resources           // 應(yīng)用資源目錄

構(gòu)建界面

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

標(biāo)題欄中的元素呈水平分布,包含“返回”圖標(biāo)、“編輯”標(biāo)題和“保存”圖標(biāo)。div容器內(nèi)元素默認(rèn)為水平分布,開發(fā)者將對(duì)應(yīng)元素置于div容器組件中即可?!胺祷亍眻D標(biāo)和“編輯”標(biāo)題置于同一個(gè)子div容器中,組成一個(gè)新元素,與“保存”圖標(biāo)分別置于父div容器的水平兩側(cè)。

< !-- index.hml -- >
< !-- 頂部標(biāo)題欄 -- >
< 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ū)域范圍。再通過設(shè)置樣式,使范圍內(nèi)的圖片居中展示。圖片組件image設(shè)置object-fit屬性為contain,確保圖片保持寬高比縮放,并在區(qū)域內(nèi)完整展示。

< !-- 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;
}

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

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

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

審核編輯 黃宇

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

    關(guān)注

    56

    文章

    2267

    瀏覽量

    42481
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1946

    瀏覽量

    29732
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3546

    瀏覽量

    15734
收藏 人收藏

    評(píng)論

    相關(guān)推薦

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

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

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

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

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

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

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

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

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

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

    HarmonyOS資料下載專題

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

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

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

    華為開發(fā)HarmonyOS零基礎(chǔ)入門:UI組件設(shè)計(jì)開發(fā)實(shí)踐

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

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

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

    HarmonyOS面向超級(jí)終端UX設(shè)計(jì)HarmonyOS設(shè)計(jì)指南

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

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

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

    華為開發(fā)者分論壇HarmonyOS學(xué)生公開課-如何學(xué)習(xí)HarmonyOS應(yīng)用開發(fā)?

    2021華為開發(fā)者分論壇HarmonyOS學(xué)生公開課-如何學(xué)習(xí)HarmonyOS應(yīng)用開發(fā)
    的頭像 發(fā)表于 10-24 11:09 ?2009次閱讀
    華為<b class='flag-5'>開發(fā)</b>者分論壇<b class='flag-5'>HarmonyOS</b>學(xué)生公開課-如何學(xué)習(xí)<b class='flag-5'>HarmonyOS</b>應(yīng)用<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 ?3194次閱讀

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

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

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

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