UNPKG

tdesign-vue-next

Version:
1 lines 21.6 kB
{"version":3,"file":"watermark.mjs","sources":["../../../common/js/watermark/generateBase64Url.ts","../../../common/js/watermark/randomMovingStyle.ts","../../../common/js/utils/injectStyle.ts","../../../components/watermark/watermark.tsx"],"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","/* eslint-disable no-nested-ternary */\nexport default function randomMovingStyle() {\n const align = Math.floor(Math.random() * 4);\n const p1 = Math.floor(Math.random() * 70) + 30;\n const leftTopLimit = 0;\n const bottomLimit = 95;\n const rightLimit = 90;\n const keyframesStyle = `\n @keyframes watermark {\n 0% {left: ${align === 1 ? rightLimit : align === 3 ? leftTopLimit : p1}%; top: ${\n align === 0 ? leftTopLimit : align === 2 ? bottomLimit : p1\n}%;}\n 25% {left: ${align === 0 ? rightLimit : align === 2 ? leftTopLimit : 100 - p1}%; top: ${\n align === 1 ? bottomLimit : align === 3 ? leftTopLimit : p1\n}%;}\n 50% {left: ${align === 1 ? leftTopLimit : align === 3 ? rightLimit : 100 - p1}%; top: ${\n align === 0 ? bottomLimit : align === 2 ? leftTopLimit : 100 - p1\n}%; transform: translateX(-100%);}\n 75% {left: ${align === 0 ? leftTopLimit : align === 2 ? rightLimit : p1}%; top: ${\n align === 1 ? leftTopLimit : align === 3 ? bottomLimit : 100 - p1\n}%;}\n 100% {left: ${align === 1 ? rightLimit : align === 3 ? leftTopLimit : p1}%; top: ${\n align === 0 ? leftTopLimit : align === 2 ? bottomLimit : p1\n}%;}\n }\n `;\n return keyframesStyle;\n}\n","const injectStyle = (style: string) => {\n const styleElement = document.createElement('style');\n let styleSheet = null;\n document.head.appendChild(styleElement);\n styleSheet = styleElement.sheet;\n styleSheet.insertRule(style, styleSheet.cssRules.length);\n};\n\nexport default injectStyle;\n","import { computed, onMounted, defineComponent, watch, ref, reactive, shallowRef } from 'vue';\nimport props from './props';\nimport generateBase64Url from '@tdesign/common-js/watermark/generateBase64Url';\nimport randomMovingStyle from '@tdesign/common-js/watermark/randomMovingStyle';\nimport injectStyle from '@tdesign/common-js/utils/injectStyle';\nimport { usePrefixClass } from '../hooks/useConfig';\nimport { useMutationObserver } from './hooks';\nimport { useContent } from '../hooks/tnode';\nimport setStyle from '@tdesign/common-js/utils/setStyle';\n\nexport default defineComponent({\n name: 'TWatermark',\n props,\n setup(props) {\n const backgroundImage = ref('');\n const watermarkRef = shallowRef<HTMLElement>();\n const watermarkContentRef = shallowRef<HTMLElement>();\n\n const offset = reactive(props.offset || []);\n\n const gapX = computed(() => {\n return props.movable ? 0 : props.x;\n });\n\n const gapY = computed(() => {\n return props.movable ? 0 : props.y;\n });\n\n const rotate = computed(() => {\n return props.movable ? 0 : props.rotate;\n });\n\n const backgroundRepeat = computed(() => {\n if (props.movable) {\n return 'no-repeat';\n }\n return props.isRepeat ? 'repeat' : 'no-repeat';\n });\n\n const offsetLeft = computed(() => {\n return offset[0] || gapX.value / 2;\n });\n\n const offsetTop = computed(() => {\n return offset[1] || gapY.value / 2;\n });\n\n const bgImageOptions = computed(() => ({\n width: props.width,\n height: props.height,\n rotate: rotate.value,\n lineSpace: props.lineSpace,\n alpha: props.alpha,\n gapX: gapX.value,\n gapY: gapY.value,\n watermarkContent: props.watermarkContent,\n offsetLeft: offsetLeft.value,\n offsetTop: offsetTop.value,\n }));\n\n const removeWaterMark = () => {\n if (!watermarkContentRef.value) return;\n watermarkContentRef.value.remove();\n watermarkContentRef.value = null;\n };\n\n const injectWaterMark = () => {\n generateBase64Url(bgImageOptions.value, (base64Url) => {\n removeWaterMark();\n\n backgroundImage.value = base64Url;\n watermarkContentRef.value = document.createElement('div');\n setStyle(watermarkContentRef.value, {\n zIndex: props.zIndex,\n position: 'absolute',\n left: 0,\n right: 0,\n top: 0,\n bottom: 0,\n width: '100%',\n height: '100%',\n backgroundSize: `${gapX.value + props.width}px`,\n pointerEvents: 'none',\n backgroundRepeat: backgroundRepeat.value,\n backgroundImage: `url('${backgroundImage.value}')`,\n animation: props.movable ? `watermark infinite ${(props.moveInterval * 4) / 60}s` : 'none',\n });\n watermarkRef.value?.append(watermarkContentRef.value);\n });\n\n if (props.movable) {\n const keyframesStyle = randomMovingStyle();\n injectStyle(keyframesStyle);\n }\n };\n\n onMounted(() => {\n injectWaterMark();\n useMutationObserver(\n watermarkRef.value,\n (mutations) => {\n if (props.removable || !watermarkContentRef.value) return;\n for (const mutation of mutations) {\n const isRemoved = Array.from(mutation.removedNodes).includes(watermarkContentRef.value);\n const isModified = mutation.type === 'attributes' && watermarkContentRef.value === mutation.target;\n if (isRemoved || isModified) {\n injectWaterMark();\n break;\n }\n }\n },\n {\n attributes: true,\n childList: true,\n characterData: true,\n subtree: true,\n },\n );\n });\n\n watch(() => props, injectWaterMark, { deep: true, flush: 'post' });\n\n return () => {\n const COMPONENT_NAME = usePrefixClass('watermark');\n const renderContent = useContent();\n\n return (\n <div\n style={{ position: 'relative', overflow: 'hidden', width: '100%' }}\n class={COMPONENT_NAME.value}\n ref={watermarkRef}\n >\n {renderContent('default', 'content')}\n </div>\n );\n };\n },\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","randomMovingStyle","align","floor","random","p1","leftTopLimit","bottomLimit","rightLimit","keyframesStyle","injectStyle","styleElement","styleSheet","head","appendChild","sheet","insertRule","cssRules","defineComponent","name","props","setup","backgroundImage","ref","watermarkRef","shallowRef","watermarkContentRef","offset","reactive","computed","movable","x","y","backgroundRepeat","isRepeat","value","bgImageOptions","removeWaterMark","remove","injectWaterMark","base64Url","_watermarkRef$value","setStyle","zIndex","position","left","right","bottom","backgroundSize","pointerEvents","animation","moveInterval","append","onMounted","useMutationObserver","mutations","removable","_iterator","_createForOfIteratorHelper","_step","s","n","done","mutation","isRemoved","from","removedNodes","includes","isModified","type","target","err","e","f","attributes","childList","characterData","subtree","watch","deep","flush","COMPONENT_NAME","usePrefixClass","renderContent","useContent","_createVNode","overflow"],"mappings":"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"}