{"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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"}