鸿蒙next开发:页面添加水印-Canvas

介绍

在很多的场景中,如保存图片以及容器封面都能够见到水印,本案例通过Canvas组件以及OffscreenCanvas实现了页面添加水印以及保存图片时添加水印的功能。

效果图预览

使用说明

  1. 进入页面,页面背景显示水印效果。
  2. 长按轮播图片,弹出半模态弹窗,点击保存按钮,图片保存在图库中,查看图片,图片显示水印。

实现思路

本示例使用两种方法添加水印 方法一:Canvas组件绘制水印,然后将水印组件通过overlay属性将水印作为浮层放置在页面中 方法二:获取初始图片的pixelMap对象, 通过OffscreenCanvas绘制水印,并生成一个新的pixelMap对象进行保存。

Canvas组件绘制水印

  1. 自定义一个WaterMarkView组件,在Canvas组件的onReady函数中执行内容的填入逻辑。context.fillStyle、context.font、context.textAlign以及textBaseline 来实现绘制的填充色、文本绘制中的字体大小、文本绘制中的文本对齐方式以及文本绘制中的水平对齐方式。 源码参考WaterMarkView.ets
 Canvas(this.context)
   .width('100%')
   .height('100%')
   .hitTestBehavior(HitTestMode.Transparent)
   .onReady(() => {
     // TODO:知识点:通过canvas绘制水印
     this.context.fillStyle = '#10000000';
     this.context.font = '16vp';
     this.context.textAlign = 'center';
     this.context.textBaseline = 'middle';
     ...
   })

2.通过context.fillText来进行内容的绘制,而for循环根据context.width和context.height来实现内容铺满整个画布。源码参考WaterMarkView.ets

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

3.最后通过overlay属性将水印作为浮层放置在页面中。源码参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值