UNPKG

tdesign-mobile-vue

Version:
1 lines 8.47 kB
{"version":3,"file":"generateBase64Url.mjs","sources":["../../../../src/_common/js/watermark/generateBase64Url.ts"],"sourcesContent":["import { WatermarkText, WatermarkImage } from './type';\n\nexport default function generateBase64Url({\n width,\n height,\n gapX,\n gapY,\n offsetLeft,\n offsetTop,\n rotate,\n alpha,\n watermarkContent,\n lineSpace\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}, onFinish: (url: string) => void): string {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d');\n if (!ctx) {\n // eslint-disable-next-line no-console\n console.warn('当前环境不支持Canvas, 无法绘制水印');\n onFinish('');\n return;\n }\n const ratio = window.devicePixelRatio || 1;\n const canvasWidth = (gapX + width) * ratio;\n const canvasHeight = (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 ctx.translate(offsetLeft * ratio, offsetTop * ratio);\n ctx.rotate((Math.PI / 180) * Number(rotate));\n ctx.globalAlpha = alpha;\n\n const markWidth = width * ratio;\n const markHeight = height * ratio;\n\n ctx.fillStyle = 'transparent';\n ctx.fillRect(0, 0, markWidth, markHeight);\n\n const contents = Array.isArray(watermarkContent) ? watermarkContent : [{ ...watermarkContent }];\n let top = 0;\n contents.forEach((item: WatermarkText & WatermarkImage & { top: number }) => {\n if (item.url) {\n const { url, isGrayscale = false } = item;\n // eslint-disable-next-line no-param-reassign\n item.top = top;\n top += height;\n const img = new Image();\n img.crossOrigin = 'anonymous';\n img.referrerPolicy = 'no-referrer';\n img.src = url;\n img.onload = () => {\n // ctx.filter = 'grayscale(1)';\n ctx.drawImage(img, 0, item.top * ratio, width * ratio, height * ratio);\n if (isGrayscale) {\n const imgData = ctx.getImageData(0, 0, ctx.canvas.width, ctx.canvas.height);\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 ctx.putImageData(imgData, 0, 0);\n }\n onFinish(canvas.toDataURL());\n };\n } else if (item.text) {\n const {\n text,\n fontColor = 'rgba(0, 0, 0, 0.1)',\n fontSize = 16,\n fontFamily = undefined,\n fontWeight = 'normal',\n } = item;\n // eslint-disable-next-line no-param-reassign\n item.top = top;\n top += lineSpace;\n const markSize = Number(fontSize) * ratio;\n // TODO 后续完善font 渲染控制 目前font-family 暂时为 undefined\n ctx.font = `normal normal ${fontWeight} ${markSize}px/${markHeight}px ${fontFamily}`;\n ctx.textAlign = 'start';\n ctx.textBaseline = 'top';\n ctx.fillStyle = fontColor;\n ctx.fillText(text, 0, item.top * ratio);\n }\n });\n onFinish(canvas.toDataURL());\n}\n"],"names":["generateBase64Url","_ref","onFinish","width","height","gapX","gapY","offsetLeft","offsetTop","rotate","alpha","watermarkContent","lineSpace","canvas","document","createElement","ctx","getContext","console","warn","ratio","window","devicePixelRatio","canvasWidth","canvasHeight","style","concat","translate","Math","PI","Number","globalAlpha","markWidth","markHeight","fillStyle","fillRect","contents","Array","isArray","_objectSpread","top","forEach","item","url","_item$isGrayscale","isGrayscale","img","Image","crossOrigin","referrerPolicy","src","onload","drawImage","imgData","getImageData","pixels","data","i","length","lightness","putImageData","toDataURL","text","_item$fontColor","fontColor","_item$fontSize","fontSize","_item$fontFamily","fontFamily","_item$fontWeight","fontWeight","markSize","font","textAlign","textBaseline","fillText"],"mappings":"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"}