[经验分享] 拆·应用 第七期(下):基于开源鸿蒙的图片编辑开发样例

开源鸿蒙知行录 显示全部楼层 发表于 2026-1-22 15:41:52

【拆·应用】是为开源鸿蒙应用开发者打造的技术分享平台,是汇聚开发者的技术洞见与实践经验、提供开发心得与创新成果的展示窗口。诚邀您踊跃发声,期待您的真知灼见与技术火花! 引言 本期内容介绍基于开源鸿蒙在RK3568上开发图片编辑样例的全流程,分为上篇和下篇,本篇为下篇,主要介绍标记、保存图片功能。

样例简介

在开源鸿蒙生态建设中,多媒体能力是构建丰富用户体验的核心要素。本样例首先使用 @ohos.file.photoAccessHelper拉起图库选择图片,然后使用 image.createImageSource创建图片源实例,接下来使用 createPixelMap创建 PixelMap对象,便于实现图片的编辑功能,使用 effectKit.getHighestSaturationColor()接口实现对图片的高亮调节,利用 ImageText组件的组合给图片添加文字、贴纸,再使用 OffscreenCanvasRenderingContext2D进行离屏绘制保存新的 pixelMap

使用说明

添加文字:点击标记,再点击文字,弹出输入框,输入文字后,文字会添加到图片上,可拖动粘贴框改变粘贴的位置,选择颜色修改文字颜色。 1.png

添加贴纸:点击贴纸,可以滑动选择不同的贴纸添加到图片上,可拖动粘贴框改变粘贴的位置,点击√将贴纸添加到图片上,并返回主编辑页面。 2.png

保存图片:点击右上角的保存图标,保存编译后的图片到应用沙箱路径。 3.png

样例代码拆解

下面是各个功能模块代码逻辑详细分解。可以在这里查看样例源码。 标记图片:

  1. 标记图片主页面
  • 点击底部菜单栏标记按钮,设置 this.currentTaskTasks.MARK,显示标记图片主操作页面。 4.png
  • this.currentTaskTasks.MARK时,调用 this.getMarkTool()刷新底部菜单栏。 5.png
  • getMarkTool中显示文字和贴纸标记选项,点击调用 this.onSelectItem()添加文字和贴纸。 6.png

7.png

  1. 添加文字
  • onSelectItem中判断 item.taskTasks.TEXT,拉起自定义输入弹框。 8.png

    9.png

  • dialogController中在 InputTextDialog中通过 TextInput组件输入文字,点击确定按钮后关闭弹框,调用 this.confirm,即对应的的 onAccept10.png

  • onAccept()调用 onSelectItem,传入参数 maskDatas[0]就是 Tasks.TEXT,以及 hasInputTexttrue11.png

  • 判断 hasInputTexttrue,设置 this.currentTaskTasks.TEXT,和 this.cancelOkText,刷新底部菜单栏。 12.png

  • 根据 this.currentTaskTasks.TEXT,调用 this.getMaterialTool()组件,并传入 fontColors展示不同的颜色块。 13.png

  • getMaterialTool中调用 this.TextOrStickerScroll(),通过 List组件展示不同的颜色色块,根据传入的 materials判断是添加文字,点击色块改变文字颜色。 14.png

    15.png

  1. 添加贴纸
  • onSelectItem中判断 item.task不是 Tasks.TEXT,设置 this.currentTaskthis.cancelOkText,刷新底部菜单栏。 16.png
  • 添加贴纸和添加文字一样调用 this.getMaterialTool(),但是传入 stickers17.png
  • getMaterialTool中调用 this.TextOrStickerScroll(),通过 List组件展示不同的贴纸,根据传入的 materials判断是添加贴纸,通过 Image组件显示选择的贴纸。 18.png
  1. 标记图片
  • this.currentTaskTasks.TEXTTasks.STICKER时,通过 MaterialEdit自定义组件将文字和贴纸添加到图片上。 19.png
  • MaterialEdit页面通过 Image组件展示图片,通过 RelativeContainer展示文字或贴纸,并根据拖动的坐标设置 postion属性,从而改变文字或贴纸添加的位置。 20.png
  • RelativeContainer中通过 getMaterialBuilder展示文字或贴纸。 21.png
  • 通过 getMaterialStyle接口设置组件的对齐方式,获取手势拖动坐标。 22.png
  • 将获取的 this.centerXthis.centerY设置到 .position属性,文字或贴纸位置。 23.png
  • MaterialEdit组件 aboutToDisappear时,保存添加文字或贴纸的图片。 24.png
  1. 保存图片
  • 编译完成后,点击保存按钮,调用 this.onSave()保存编辑后的图片。 25.png
  • 调用 savePixelMap保存编辑后的图片并返回保存地址,地址为应用沙箱地址,本样例不是系统应用,故没有支持保存到系统相册。 26.png

结语

以上是本样例具体功能模块的实现,帮助开发者们了解如何实现给图片的标记功能,以及进行离屏绘制保存新图片的功能。除此之外,开源鸿蒙也提供了丰富的基础组件和其他功能模块,依托开源特性可灵活定制底层功能,借助分布式架构实现 一次开发,多端部署,大幅降低跨设备协同开发成本,一系列配套的开发工具和教程可让开发者快速上手,欢迎更多的开发者加入到开源鸿蒙应用开发中,创造更多奇思妙想的应用。

©著作权归作者所有,转载或内容合作请联系作者

您尚未登录,无法参与评论,登录后可以:
参与开源共建问题交流
认同或收藏高质量问答
获取积分成为开源共建先驱

Copyright   ©2025  OpenHarmony开发者论坛  京ICP备2020036654号-3 | 京公网安备11030102011662号 |技术支持 Discuz!

返回顶部