HarmonyOS 用Canvas绘制文字水印,独立出全局水印方法,加上判断水印就无法生效

1、在任意页面根组件的overlay方法调用全局水印方法。

2、一但全局水印方法有任何判断语句均无法绘制。

代码如下:

import { GlobalContext } from '../common/config/GlobalContext';
import { userEntity } from '../utils/CacheInfoUtils';

let settings: RenderingContextSettings = new RenderingContextSettings(true);
let context: CanvasRenderingContext2D = new CanvasRenderingContext2D(settings);
let user = GlobalContext.getContext().getObject('userEntry') as userEntity
let sysParamConfig =
  GlobalContext.getContext().getObject('sysParamConfig') as Record<string, string>;
let CLIENT_ALLOW_WATERMARK = sysParamConfig['CLIENT_ALLOW_WATERMARK']

function isWater(): boolean {
  if (sysParamConfig) {
    if (CLIENT_ALLOW_WATERMARK) {
      if (CLIENT_ALLOW_WATERMARK === "off") {
        return false
      } else if (CLIENT_ALLOW_WATERMARK === "on") {
        return true
      }
    }
  }
  return false;
}

/**
 * 全局水印方法
 **/
@Builder
export function Water() {
  if (1 < 3) {
    Canvas(context)
      .width("100%")
      .height("100%")
      .hitTestBehavior(HitTestMode.None)
      .onReady(() => {
        context.fillStyle = '#10000000'
        context.font = "16vp"
        context.textAlign = "center"
        context.textBaseline = "middle"
        // 在这里绘制文字水印,也可以是图片水印
        for (let i = 0; i < context.width / 120; i++) {
          context.translate(120, 0)
          let j = 0
          for (; j < context.height / 120; j++) {
            context.rotate(-Math.PI / 180 * 30)
            // 此处水印数据是写死的,具体请替换为自己的水印
            context.fillText(user.true_name, -60, -60)
            context.rotate(Math.PI / 180 * 30)
            context.translate(0, 120)
          }
          context.translate(0, -120 * j)
        }
      })
  }
}
HarmonyOS
2天前
浏览
收藏 0
回答 1
待解决
回答 1
按赞同
/
按时间
zbw_apple

判断条件必须包在根节点里面,可以在外面包一层column即可正常使用,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/arkts-builder-V5#builder函数里面使用的组件没有根节点包裹

示例参考如下:

let settings: RenderingContextSettings = new RenderingContextSettings(true)
let context: CanvasRenderingContext2D = new CanvasRenderingContext2D(settings)

/**
 * 全局水印方法
 **/
@Builder
export function Water() {
  Column() {
    if (true) {
      Canvas(context)
        .width("100%")
        .height("100%")
        .hitTestBehavior(HitTestMode.None)
        .onReady(() => {
          context.fillStyle = '#10000000'
          context.font = "16vp"
          context.textAlign = "center"
          context.textBaseline = "middle"
          // 在这里绘制文字水印,也可以是图片水印
          for (let i = 0; i < context.width / 120; i++) {
            context.translate(120, 0)
            let j = 0
            for (; j < context.height / 120; j++) {
              context.rotate(-Math.PI / 180 * 30)
              // 此处水印数据是写死的,具体请替换为自己的水印
              context.fillText('这是水印', -60, -60)
              context.rotate(Math.PI / 180 * 30)
              context.translate(0, 120)
            }
            context.translate(0, -120 * j)
          }
        })
    }
  }
}

@Entry
@Component
struct Page4 {
  @State message: string = 'Hello World';
  @State num: number = 0

  build() {
    RelativeContainer() {
      Text(this.message)
        .id('Page4HelloWorld')
        .fontSize(50)
        .fontWeight(FontWeight.Bold)
        .alignRules({
          center: { anchor: '__container__', align: VerticalAlign.Center },
          middle: { anchor: '__container__', align: HorizontalAlign.Center }
        })
        .onClick(() => {
          this.num += 1;
        })
        .overlay(Water(), { align: Alignment.Center })
    }
    .height('100%')
    .width('100%')
  }
}
分享
微博
QQ
微信
回复
2天前
相关问题
HarmonyOS 水印相机、水印视频
176浏览 • 1回复 待解决
canvas如何实现水印效果
1114浏览 • 1回复 待解决
HarmonyOS 绘制水印如何实现?
296浏览 • 1回复 待解决
HarmonyOS 如何使用全局水印
106浏览 • 1回复 待解决
HarmonyOS app全局水印怎么实现
25浏览 • 1回复 待解决
如何使用canvas添加水印
1549浏览 • 1回复 待解决
HarmonyOS 使用canvas进行图片水印操作
36浏览 • 1回复 待解决
HarmonyOS 如何给图片增加文字水印
170浏览 • 1回复 待解决
基于原生的水印添加能力
949浏览 • 1回复 待解决
HarmonyOS 背景水印问题
449浏览 • 1回复 待解决
HarmonyOS是否支持图片添加水印
456浏览 • 1回复 待解决
HarmonyOS拍照后图片添加水印
34浏览 • 1回复 待解决
图片处理(加动态水印
408浏览 • 1回复 待解决
HarmonyOS windows级别添加水印
161浏览 • 1回复 待解决
HarmonyOS 有没有对UI添加水印方法
208浏览 • 1回复 待解决
HarmonyOS 如何在app内全页面添加水印
161浏览 • 1回复 待解决
HarmonyOS 拍照后的图片加水印
217浏览 • 1回复 待解决
HarmonyOS 图片增加自定义水印
114浏览 • 1回复 待解决
HarmonyOS 如何给 app 添加水印
584浏览 • 1回复 待解决
HarmonyOS PDF添加水印后展示白屏
191浏览 • 1回复 待解决