本文原创发布在华为开发者社区。
介绍
本项目基于OpenHarmony三方库 ImageKnife 进行图片处理场景开发使用:
- 支持不同类型的本地与网络图片展示。
- 支持拉起相机拍照展示与图库照片选择展示。
- 支持图片单一种变换效果。
- 支持本地/在线图片格式:JPG、PNG、SVG、GIF、DPG、WEBP、BMP
实现图片处理功能源码链接
效果预览

使用说明
下载安装
- 根目录下的oh-package.json5中dependencies增加
- 并在根目录执行ohpm install
相关权限
- ohos.permission.INTERNET
- ohos.permission.MEDIA_LOCATION
- ohos.permission.READ_MEDIA
- ohos.permission.WRITE_MEDIA
依赖配置
在entry\src\main\ets\entryability\EntryAbility.ts中做如下配置初始化全局ImageKnife实例:
实现思路
亮度调节功能
- 定义Slider组件,设置onChange回调函数。当滑动条的值发生变化时,该回调函数会被触发,执行一系列操作。
具体操作包括:将滑动条当前的值value赋值给 this.brightNessValue,用于记录当前亮度值。
设置this.showUI = true,用于控制相关用户界面的显示,显示与亮度值相关的图片元素。
当滑动条值变化的模式mode为SliderChangeMode.End时,重置并启动this.textTimerController定时器。
- 构造brightnessPixelMap()函数,根据当前的亮度值(this.brightNessValue)对指定图像进行亮度调整,并获取调整后的像素图(drawPixelMap 中的 imagePixelMap)。
对比度调整功能
构造contrastPixelMap()函数,通过RequestOption配置对指定图像(由this.mUrl指定)应用对比度滤镜,并获取处理后的图像像素图(this.mBrightnessPixelMap)。
实例化RequestOption类,生成imageKnifeOption,用于配置图像相关操作;
使用this.contrastValue创建ContrastFilterTransformation实例transformation;
通过imageKnifeOption配置图像加载相关参数;
调用this.ImageKnife并传入imageKnifeOption。
图片裁剪功能
构造setOptions()函数,基于传入的ArrayBuffer数据,配置并加载一个图像相关的Options对象。在配置过程中,设置了图像的宽度、高度以及裁剪函数,并最终加载ArrayBuffer数据。
图片旋转功能
构造transformRotate()函数,对指定图像(由this.mUrl确定)进行旋转操作,并获取旋转后的图像像素图。
具体步骤如下:
- 创建请求选项对象:实例化RequestOption类得到imageKnifeOption,用于配置图像相关的请求。
- 创建旋转变换实例:使用this.mRotate创建RotateImageTransformation实例 transformation。
- 配置图像请求:通过imageKnifeOption配置图像加载相关参数。加载图像的URL为this.mUrl,添加一个回调函数来处理图像加载完成后的结果,设置图像视图大小为200x200(经过vp2px转换后的像素值),跳过内存缓存,并设置旋转角度为this.mRotate。
- 调用图像处理函数:调用this.ImageKnife并传入imageKnifeOption。如果图像加载成功,将结果中的imagePixelMap赋值给this.mRotatePixelMap。