tdesign-mobile-vue
Version:
tdesign-mobile-vue
1 lines • 15.2 kB
Source Map (JSON)
{"version":3,"file":"generateBase64Url.mjs","sources":["../../../../src/_common/js/watermark/generateBase64Url.ts"],"sourcesContent":["import { WatermarkText, WatermarkImage, WatermarkLayout } from './type';\n\nexport default function generateBase64Url(\n {\n width,\n height,\n gapX,\n gapY,\n offsetLeft,\n offsetTop,\n rotate,\n alpha,\n watermarkContent,\n lineSpace,\n fontColor = 'rgba(0,0,0,0.1)',\n layout,\n }: {\n width: number;\n height: number;\n gapX: number;\n gapY: number;\n offsetLeft: number;\n offsetTop: number;\n rotate: number;\n alpha: number;\n watermarkContent: WatermarkText | WatermarkImage | Array<WatermarkText | WatermarkImage>;\n lineSpace: number;\n fontColor?: string;\n layout?: WatermarkLayout;\n },\n onFinish: (url: string, backgroundSize?: { width: number }) => void\n): string {\n const isHexagonal = layout === 'hexagonal';\n\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n\n if (!ctx) {\n // eslint-disable-next-line no-console\n console.warn('当前环境不支持Canvas, 无法绘制水印');\n onFinish('');\n return;\n }\n\n const ratio = window.devicePixelRatio || 1;\n\n let actualBackgroundSize = {\n width: gapX + width,\n };\n\n const canvasWidth = (gapX + width) * ratio;\n const canvasHeight = (gapY + height) * ratio;\n\n const markWidth = width * ratio;\n const markHeight = height * ratio;\n\n const dislocationRotateX = canvasWidth;\n const dislocationRotateY = canvasHeight;\n const dislocationDrawX = (gapX + width) * ratio;\n const dislocationDrawY = (gapY + height) * ratio;\n\n canvas.width = canvasWidth;\n canvas.height = canvasHeight;\n canvas.style.width = `${gapX + width}px`;\n canvas.style.height = `${gapY + height}px`;\n\n if (isHexagonal) {\n canvas.style.width = `${canvasWidth * 2}px`;\n canvas.style.height = `${canvasHeight * 2}px`;\n canvas.width = canvasWidth * 2;\n canvas.height = canvasHeight * 2;\n\n // 两倍宽度+间距\n actualBackgroundSize = {\n width: gapX + width * 2 + width / 2,\n };\n }\n\n ctx.translate(offsetLeft * ratio, offsetTop * ratio);\n ctx.globalAlpha = alpha;\n\n ctx.fillStyle = 'transparent';\n ctx.fillRect(0, 0, markWidth, markHeight);\n\n // 元素中心为旋转点执行旋转\n const drawRotate = (ctx: CanvasRenderingContext2D, x: number, y: number, rotate: number) => {\n ctx.translate(x, y);\n ctx.rotate((Math.PI / 180) * Number(rotate));\n ctx.translate(-x, -y);\n };\n\n // 绘制文字\n const drawText = (\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n markHeight: number,\n text: string,\n fontWeight: string,\n fontSize: number,\n fontFamily: string,\n fillStyle: string\n ) => {\n ctx.font = `normal normal ${fontWeight} ${fontSize * ratio}px/${markHeight}px ${fontFamily}`;\n ctx.fillStyle = fillStyle;\n ctx.textAlign = 'start';\n ctx.textBaseline = 'top';\n\n ctx.fillText(text, x, y);\n };\n\n const contents = (Array.isArray(watermarkContent) ? watermarkContent : [{ ...watermarkContent }]) as Array<\n WatermarkText & WatermarkImage & { top: number }\n >;\n\n let top = 0;\n let imageLoadCount = 0;\n let totalImages = 0;\n\n // 预处理\n contents.forEach((item) => {\n // eslint-disable-next-line no-param-reassign\n item.top = top;\n if (item.url) {\n top += height;\n totalImages += isHexagonal ? 2 : 1; // hexagonal布局需要绘制两次\n } else if (item.text) {\n top += lineSpace;\n }\n });\n\n // 绘制水印内容\n const renderWatermarkItem = (\n item: WatermarkText & WatermarkImage & { top: number },\n offsetX: number = 0,\n offsetY: number = 0,\n rotateX: number = 0,\n rotateY: number = 0\n ) => {\n if (item.url) {\n const { url, isGrayscale = false } = item;\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.referrerPolicy = 'no-referrer';\n img.src = url;\n img.onload = () => {\n ctx.save?.();\n drawRotate(ctx, rotateX, rotateY, rotate);\n\n // fix: 灰度效果只影响图片,不影响文字\n if (isGrayscale) {\n const tempCanvas = document.createElement('canvas');\n const tempCtx = tempCanvas.getContext('2d');\n tempCanvas.width = width * ratio;\n tempCanvas.height = height * ratio;\n\n tempCtx.drawImage(img, 0, 0, width * ratio, height * ratio);\n\n const imgData = tempCtx.getImageData(0, 0, width * ratio, height * ratio);\n const pixels = imgData.data;\n for (let i = 0; i < pixels.length; i += 4) {\n const lightness = (pixels[i] + pixels[i + 1] + pixels[i + 2]) / 3;\n pixels[i] = lightness;\n pixels[i + 1] = lightness;\n pixels[i + 2] = lightness;\n }\n tempCtx.putImageData(imgData, 0, 0);\n\n ctx.drawImage(tempCanvas, offsetX, offsetY + item.top * ratio, width * ratio, height * ratio);\n } else {\n ctx.drawImage(img, offsetX, offsetY + item.top * ratio, width * ratio, height * ratio);\n }\n\n ctx.restore?.();\n\n // 图片加载完成再返回\n imageLoadCount += 1;\n if (imageLoadCount === totalImages) {\n onFinish(canvas.toDataURL(), actualBackgroundSize);\n }\n };\n } else if (item.text) {\n const { text, fontSize = 16, fontFamily = 'normal', fontWeight = 'normal' } = item;\n const fillStyle = item?.fontColor || fontColor;\n\n ctx.save?.();\n drawRotate(ctx, rotateX, rotateY, rotate);\n drawText(ctx, offsetX, offsetY + item.top * ratio, markHeight, text, fontWeight, fontSize, fontFamily, fillStyle);\n ctx.restore?.();\n }\n };\n\n // 矩形水印\n contents.forEach((item) => {\n renderWatermarkItem(item, 0, 0, 0, 0);\n });\n\n // 六边形水印\n if (isHexagonal) {\n contents.forEach((item) => {\n renderWatermarkItem(item, dislocationDrawX, dislocationDrawY, dislocationRotateX, dislocationRotateY);\n });\n }\n\n // 没有图片\n if (totalImages === 0) {\n onFinish(canvas.toDataURL(), actualBackgroundSize);\n }\n}\n"],"names":["generateBase64Url","_ref","onFinish","width","height","gapX","gapY","offsetLeft","offsetTop","rotate","alpha","watermarkContent","lineSpace","_ref$fontColor","fontColor","layout","isHexagonal","canvas","document","createElement","ctx","getContext","console","warn","ratio","window","devicePixelRatio","actualBackgroundSize","canvasWidth","canvasHeight","markWidth","markHeight","dislocationRotateX","dislocationRotateY","dislocationDrawX","dislocationDrawY","style","concat","translate","globalAlpha","fillStyle","fillRect","drawRotate","x","y","Math","PI","Number","drawText","text","fontWeight","fontSize","fontFamily","font","textAlign","textBaseline","fillText","contents","Array","isArray","_objectSpread","top","imageLoadCount","totalImages","forEach","item","url","renderWatermarkItem","offsetX","arguments","length","undefined","offsetY","rotateX","rotateY","_item$isGrayscale","isGrayscale","img","Image","crossOrigin","referrerPolicy","src","onload","_ctx$save","_ctx$restore","save","call","tempCanvas","tempCtx","drawImage","imgData","getImageData","pixels","data","i","lightness","putImageData","restore","toDataURL","_ctx$save2","_ctx$restore2","_item$fontSize","_item$fontFamily","_item$fontWeight"],"mappings":"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"}