parent
dd5cc4ce01
commit
1b1845f9c6
@ -0,0 +1,33 @@
|
||||
import { IEditorOption } from "../../.."
|
||||
import { DeepRequired } from "../../../interface/Common"
|
||||
import { Draw } from "../Draw"
|
||||
|
||||
export class Watermark {
|
||||
|
||||
private draw: Draw
|
||||
private options: DeepRequired<IEditorOption>
|
||||
|
||||
constructor(draw: Draw) {
|
||||
this.draw = draw
|
||||
this.options = <DeepRequired<IEditorOption>>draw.getOptions()
|
||||
}
|
||||
|
||||
public render(ctx: CanvasRenderingContext2D) {
|
||||
const { watermark: { data, opacity, font, size, color }, scale } = this.options
|
||||
const width = this.draw.getWidth()
|
||||
const height = this.draw.getHeight()
|
||||
const x = width / 2
|
||||
const y = height / 2
|
||||
ctx.save()
|
||||
ctx.globalAlpha = opacity
|
||||
ctx.font = `${size * scale}px ${font}`
|
||||
ctx.fillStyle = color
|
||||
// 移动到中心位置再旋转
|
||||
const measureText = ctx.measureText(data)
|
||||
ctx.translate(x, y)
|
||||
ctx.rotate(-45 * Math.PI / 180)
|
||||
ctx.fillText(data, - measureText.width / 2, measureText.actualBoundingBoxAscent - size / 2)
|
||||
ctx.restore()
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1,7 @@
|
||||
export interface IWatermark {
|
||||
data: string;
|
||||
color?: string;
|
||||
opacity?: number;
|
||||
size?: number;
|
||||
font?: string;
|
||||
}
|
||||
Loading…
Reference in new issue