相关问题
HarmonyOS是否支持图片添加水印
310浏览 • 1回复 待解决
HarmonyOS 如何给 app 添加水印
363浏览 • 1回复 待解决
HarmonyOS 有没有对UI添加水印的方法
9浏览 • 1回复 待解决
canvas如何实现水印效果
942浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何使用Canvas组件在HarmonyOS中实现页面和图片的水印添加?
81浏览 • 0回复 待解决
#鸿蒙通关秘籍#如何使用Canvas组件和OffscreenCanvas实现水印功能?
133浏览 • 1回复 待解决
基于原生的水印添加能力
782浏览 • 1回复 待解决
HarmonyOS 请提供一个给拍摄/从相册选择图片添加水印,控制照片大小、质量的demo
364浏览 • 1回复 待解决
HarmonyOS 如何给UI界面添加一个水印布局
350浏览 • 1回复 待解决
如何直接通过函数去编辑图片,比如pixelMap或者说给图片加水印文字这种操作
1559浏览 • 1回复 待解决
HarmonyOS 如何给windows添加全局水印并通过appstorage设置内容和管理开关?
343浏览 • 2回复 待解决
如何使用canvas绘制圆角矩形
540浏览 • 1回复 待解决
HarmonyOS 绘制水印如何实现?
229浏览 • 1回复 待解决
HarmonyOS使用canvas如何使文字垂直居中
643浏览 • 1回复 待解决
HarmonyOS Canvas绘制出来的添加onTouch手势,但是无法移动
258浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何使用Canvas进行渐变填充?
82浏览 • 1回复 待解决
HarmonyOS svg、canvas 的使用详情
461浏览 • 1回复 待解决
HarmonyOS 背景水印问题
348浏览 • 1回复 待解决
HarmonyOS webview使用问题:如何拦截url并添加参数,如何添加请求header
32浏览 • 1回复 待解决
HarmonyOS APP内有水印功能,如何实现?
330浏览 • 0回复 待解决
图片处理(加动态水印)
328浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在Canvas上创建并使用径向渐变?
68浏览 • 1回复 待解决
如何操作canvas重新绘制
1091浏览 • 1回复 待解决
如何在使用 Canvas 绘制图像时处理像素模糊问题?
150浏览 • 0回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙中使用Canvas创建模拟时钟?
54浏览 • 1回复 待解决
需要实现为image添加文字、增加马赛克、水印等功能。
需要支持如下功能点:
当前已实现功能:
暂未实现功能点:
使用的核心API
核心代码解释
功能1:从图片导入图片
导入图片主要使用picker.PhotoViewPicker()API拉起图片选择图片,相关代码如下:
从图库中读取图片后使用fs的相关接口将其转化为ArrayBuffer方便后期操作,拿到该图片的buffer以后就可以在canvas中绘制该图片了,因为屏幕大小是固定的,显示图片的区域也是固定的,而图片的大小是可变的,所以在绘制图片的时候我们需要进行一些比例换算,这里只做了竖图的适配,暂未实现横图适配,核心代码如下:
代码解释:
主要逻辑就是在createPixelMap的回调中,通过getComponentRect("imageContainer")接口获取屏幕中实际显示图片区域的宽度,然后除以图片的实际宽度得到一个缩放比例imageScale,在绘制的时候将画笔进行矩阵变换x与y轴都缩放该比例,然后使用drawImage从画布的左上角开始绘制,这样可以得到一张等比例的图片会知道界面中
功能2:添加水印/文字
当前实现的水印就是文字水印,也可以绘制图片水印等等,这个可以根据需要自己自定义,主要实现思路就是在当前的画布中在指定的位置继续绘制文字/图片即可
功能3:保存到本地图库
这里保存可以有两种方式,一种是保存到图库,一种是保存到文件管理,实现方式不一样
保存到图库
ps: 这里有一点说明下,当前实现的仅仅只是恢复原图的像素比例,还是会有图片被压缩导致的轻微失真现象,该问题在想办法优化中
保存到图库官网接口更改了需要使用安全控件来保存,核心代码如下
代码解释:
主要是使用photoAccessHelperAPI接口获取到图库的uri地址,然后因为我们在绘制图片的时候是对图片进行了缩放的,现在需要吧缩放的图片还原回原来的大小,所以我们新建了一个OffscreenCanvas,大小就是原图的大小,然后获取我们添加了水印的图片——也就是我们页面中能看到的canvas,主要是使用getPixelMap接口,将该数据绘制在OffscreenCanvas中然后通过saveToFile保存下来,saveToFile代码如下
完整代码
Index.ets
utils.ts