{"version":3,"file":"drawLogo2.mjs","sources":["../../../../../../../packages/components/qr-code/src/drawLogo.ts"],"sourcesContent":["import { isString } from '@tav-ui/utils/is'\nimport type { LogoType, RenderQrCodeParams } from './typing'\n\nexport const drawLogo = ({ canvas, logo }: RenderQrCodeParams) => {\n  if (!logo) {\n    return new Promise((resolve) => {\n      resolve((canvas as HTMLCanvasElement).toDataURL())\n    })\n  }\n  const canvasWidth = (canvas as HTMLCanvasElement).width\n  const {\n    logoSize = 0.15,\n    bgColor = '#ffffff',\n    borderSize = 0.05,\n    crossOrigin,\n    borderRadius = 8,\n    logoRadius = 0,\n  } = logo as LogoType\n\n  const logoSrc: string = isString(logo) ? logo : logo.src\n  const logoWidth = canvasWidth * logoSize\n  const logoXY = (canvasWidth * (1 - logoSize)) / 2\n  const logoBgWidth = canvasWidth * (logoSize + borderSize)\n  const logoBgXY = (canvasWidth * (1 - logoSize - borderSize)) / 2\n\n  const ctx = canvas.getContext('2d')\n  if (!ctx) return\n\n  // logo 底色\n  canvasRoundRect(ctx)(logoBgXY, logoBgXY, logoBgWidth, logoBgWidth, borderRadius)\n  ctx.fillStyle = bgColor\n  ctx.fill()\n\n  // logo\n  const image = new Image()\n  if (crossOrigin || logoRadius) {\n    image.setAttribute('crossOrigin', crossOrigin || 'anonymous')\n  }\n  image.src = logoSrc\n\n  // 使用image绘制可以避免某些跨域情况\n  const drawLogoWithImage = (image: CanvasImageSource) => {\n    ctx.drawImage(image, logoXY, logoXY, logoWidth, logoWidth)\n  }\n\n  // 使用canvas绘制以获得更多的功能\n  const drawLogoWithCanvas = (image: HTMLImageElement) => {\n    const canvasImage = document.createElement('canvas')\n    canvasImage.width = logoXY + logoWidth\n    canvasImage.height = logoXY + logoWidth\n    const imageCanvas = canvasImage.getContext('2d')\n    if (!imageCanvas || !ctx) return\n    imageCanvas.drawImage(image, logoXY, logoXY, logoWidth, logoWidth)\n\n    canvasRoundRect(ctx)(logoXY, logoXY, logoWidth, logoWidth, logoRadius)\n    if (!ctx) return\n    const fillStyle = ctx.createPattern(canvasImage, 'no-repeat')\n    if (fillStyle) {\n      ctx.fillStyle = fillStyle\n      ctx.fill()\n    }\n  }\n\n  // 将 logo绘制到 canvas上\n  return new Promise((resolve) => {\n    image.onload = () => {\n      logoRadius ? drawLogoWithCanvas(image) : drawLogoWithImage(image)\n      resolve((canvas as HTMLCanvasElement).toDataURL())\n    }\n  })\n}\n\n// copy来的方法，用于绘制圆角\nfunction canvasRoundRect(ctx: CanvasRenderingContext2D) {\n  return (x: number, y: number, w: number, h: number, r: number) => {\n    const minSize = Math.min(w, h)\n    if (r > minSize / 2) {\n      r = minSize / 2\n    }\n    ctx.beginPath()\n    ctx.moveTo(x + r, y)\n    ctx.arcTo(x + w, y, x + w, y + h, r)\n    ctx.arcTo(x + w, y + h, x, y + h, r)\n    ctx.arcTo(x, y + h, x, y, r)\n    ctx.arcTo(x, y, x + w, y, r)\n    ctx.closePath()\n    return ctx\n  }\n}\n"],"names":[],"mappings":"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"}