HarmonyOS 鸿蒙Next在页面背景上添加全局水印

发布于 1周前 作者 bupafengyu 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next基于原生的水印添加能力

场景描述

HarmonyOS 鸿蒙Next在页面背景上添加全局水印 HarmonyOS添加水印是一个比较常见的功能,下面列举一些遇到的业务需求:

场景一:在页面背景上添加全局水印

方案描述

##场景一、在页面背景上添加全局水印

效果图:

image.png

方案

页面全局水印的实现思路是使用透明背景的canvas画布绘制文字水印,在使用Stack组件叠加在page跟容器上

方式一:使用canvas进行绘制

Stack({ alignContent: Alignment.Center }) {

Column() {

Text("没有数据哦").fontColor("#495057")

Image($r("app.media.empty")).width(300)

}

Canvas(this.context)

.width("100%")

.height("100%")

.hitTestBehavior(HitTestMode.Transparent)

.onReady(() => {

this.context.fillStyle = '#10000000'

this.context.font = "16vp"

this.context.textAlign = "center"

this.context.textBaseline = "middle"

// 在这里绘制文字水印,也可以是图片水印

for (let i = 0; i < this.context.width / 120; i++) {

this.context.translate(120, 0)

let j = 0

for (; j < this.context.height / 120; j++) {

this.context.rotate(-Math.PI / 180 * 30)

// 此处水印数据是写死的,具体请替换为自己的水印

this.context.fillText("水印水印水印", -60, -60)

this.context.rotate(Math.PI / 180 * 30)

this.context.translate(0, 120)

}

this.context.translate(0, -120 * j)

}

})

}.layoutWeight(1)

方式二:使用overlay属性绘制

方式二思路与方式一实现思路一致,该方式可以讲水印组件单独拧出来,在其他使用时使用overlay属性来使用,实现效果与方式一一致

@Builder

Watermark() {

Canvas(this.context)

.width("100%")

.height("100%")

.hitTestBehavior(HitTestMode.Transparent)

.onReady(() => {

this.context.fillStyle = '#10000000'

this.context.font = "16vp"

this.context.textAlign = "center"

this.context.textBaseline = "middle"

// 在这里绘制文字水印,也可以是图片水印

for (let i = 0; i < this.context.width / 120; i++) {

this.context.translate(120, 0)

let j = 0

for (; j < this.context.height / 120; j++) {

this.context.rotate(-Math.PI / 180 * 30)

// 此处水印数据是写死的,具体请替换为自己的水印

this.context.fillText("水印水印水印", -60, -60)

this.context.rotate(Math.PI / 180 * 30)

this.context.translate(0, 120)

}

this.context.translate(0, -120 * j)

}

})

}


Column() {

Text("没有数据哦").fontColor("#495057")

Image($r("app.media.empty")).width(300)

}

.layoutWeight(1)

.overlay(this.Watermark())

.width("100%")

更多场景参考下面地址: https://developer.huawei.com/consumer/cn/forum/topic/0202153747914463557?fid=0109140870620153026

10 回复
这个好,收藏了~
大佬,场景四(window级别的全局水印)能提供下思路么?

当前只能按照方案一的方式来写,然后大概思路就是在按照方案一的方式给navigation添加水印 然后吧所有的页面都维护在navigation中,这样在一个窗口里面的所有页面都存在水印

方案二,用上了
请问一下,有给视频添加水印的嘛?

上面方案暂时只能给图片添加水印,视频水印如果是在app中可以参考全局水印方案,盖一层蒙版在视频组件上

我是想在录视频时,把水印添加上,不是在预览的时候添加

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

场景二,保存添加水印后的图片,图片大小增加了几十倍,99kb的图片变成了9MB。

HarmonyOS 鸿蒙Next支持原生的水印添加能力,允许开发者在多种场景下灵活应用水印。在页面背景上,可通过Canvas或Overlay方式绘制水印;保存或拍照图片时,可使用OffScreenCanvas在离屏画布上绘制水印并保存。这些功能提升了应用的版权保护和个性化设置能力。如需深入了解实现细节,建议查阅HarmonyOS官方文档或相关开发者社区。如果问题依旧没法解决请加我微信,我的微信是itying888。

回到顶部