可以参考此文档:(https://developer.huawei.com/consumer/cn/doc/harmonyos-samples-V5/samples-application-framework-0000001903082910-V5可查询到相机以及图片压缩的demo。水印暂无官方示例代码:1、使用浮层overlay:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-overlay-V5\#ZH-CN\_TOPIC\_0000001884917642\_\_overlay2、使用canvas绘制:import measure from '@ohos.measure'; @Entry @Component struct Index { @State message: string = 'Hello World' @State show: boolean = false @State watermarkColor: string = '#ff0000'; @State waterTextSize: number = 14; @State watermarkText: string = '这是一条水印' build() { Stack() { Column() { Text(this.message) .fontSize(20) .fontWeight(FontWeight.Bold) .margin({ bottom: 10 }) .textAlign(TextAlign.Center) .width('100%') Row() { Button("颜色1") .fontSize(11) .onClick(() => { this.watermarkColor = '#00ff00' }) Button("颜色2") .fontSize(11) .onClick(() => { this.watermarkColor = '#0000ff' }) } } MiniWatermark({ waterText: this.watermarkText, waterTextSize: this.waterTextSize, waterTextColor: this.watermarkColor }) } } } @Component export struct MiniWatermark { private settings: RenderingContextSettings = new RenderingContextSettings(true); private context: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings); private settings2: RenderingContextSettings = new RenderingContextSettings(true); private context2: CanvasRenderingContext2D = new CanvasRenderingContext2D(this.settings2); @Prop @Watch('clearAndDraw') waterText: string; @Prop @Watch('clearAndDraw') waterTextSize: number; @Prop @Watch('clearAndDraw') waterTextColor: string; @State image: string = ''; @State realWidth: number = 0; @State realHeight: number = 0; aboutToAppear() { this.initWH(); } clearAndDraw() { this.initWH(); this.drawText(); this.drawWaterMark(); } private initWH() { const textWidth = measure.measureText({ textContent: this.waterText, fontSize: `${this.waterTextSize}fp` }); this.realWidth = textWidth + vp2px(20); const textHeight = textWidth * 0.6; this.realHeight = textHeight + vp2px(20); } build() { Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) { Stack() { Canvas(this.context2) .width(this.realWidth + 'px') .height(this.realHeight + 'px') .backgroundColor(Color.Green) .onReady(() => { this.context2.rotate(30 * Math.PI / 180); this.drawText(); }) .visibility(Visibility.Visible) Canvas(this.context) .width('100%') .height('100%') .backgroundColor(Color.Transparent) .onReady(() => { this.drawWaterMark(); }) .visibility(Visibility.Visible) } .width('100%') .height('100%') .hitTestBehavior(HitTestMode.Transparent) }.hitTestBehavior(HitTestMode.Transparent) } private drawWaterMark() { this.context.clearRect(0, 0, 6000, 6000); // 绘制填充类文本 const img: ImageBitmap = new ImageBitmap(this.image); const pattern = this.context.createPattern(img, 'repeat'); if (pattern) { this.context.fillStyle = pattern; } this.context.fillRect(0, 0, 6000, 6000); this.context.restore(); } private drawText() { this.context2.rotate(-30 * Math.PI / 180); this.context2.clearRect(0, 0, 6000, 6000); this.context2.rotate(30 * Math.PI / 180); this.context2.font = `${fp2px(this.waterTextSize)}px`; this.context2.fillStyle = this.waterTextColor; this.context2.fillText(this.waterText, 10, 10); this.context2.restore(); this.image = this.context2.toDataURL(); } private drawColor() { this.context2.fillStyle = this.waterTextColor; this.context2.clearRect(0, 0, 6000, 6000); this.context2.rotate(30 * Math.PI / 180); this.context2.font = `${fp2px(this.waterTextSize)}px`; this.context2.fillStyle = this.waterTextColor; this.context2.fillText(this.waterText, 10, 10); this.context2.restore(); this.image = this.context2.toDataURL(); } }
可以参考此文档:(https://developer.huawei.com/consumer/cn/doc/harmonyos-samples-V5/samples-application-framework-0000001903082910-V5可查询到相机以及图片压缩的demo。
水印暂无官方示例代码:
1、使用浮层overlay:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/ts-universal-attributes-overlay-V5\#ZH-CN\_TOPIC\_0000001884917642\_\_overlay
2、使用canvas绘制: