fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 34.8 kB
Source Map (JSON)
{"version":3,"file":"Resize.mjs","sources":["../../../src/filters/Resize.ts"],"sourcesContent":["import { BaseFilter } from './BaseFilter';\nimport type {\n T2DPipelineState,\n TWebGLPipelineState,\n TWebGLUniformLocationMap,\n} from './typedefs';\nimport { isWebGLPipelineState } from './utils';\nimport { classRegistry } from '../ClassRegistry';\nimport { createCanvasElement } from '../util/misc/dom';\nimport type { XY } from '../Point';\n\nexport type TResizeType = 'bilinear' | 'hermite' | 'sliceHack' | 'lanczos';\n\nexport type ResizeOwnProps = {\n resizeType: TResizeType;\n scaleX: number;\n scaleY: number;\n lanczosLobes: number;\n};\n\nexport const resizeDefaultValues: ResizeOwnProps = {\n resizeType: 'hermite',\n scaleX: 1,\n scaleY: 1,\n lanczosLobes: 3,\n};\n\ntype ResizeDuring2DResize = Resize & {\n rcpScaleX: number;\n rcpScaleY: number;\n};\n\ntype ResizeDuringWEBGLResize = Resize & {\n rcpScaleX: number;\n rcpScaleY: number;\n horizontal: boolean;\n width: number;\n height: number;\n taps: number[];\n tempScale: number;\n dH: number;\n dW: number;\n};\n\n/**\n * Resize image filter class\n * @example\n * const filter = new Resize();\n * object.filters.push(filter);\n * object.applyFilters(canvas.renderAll.bind(canvas));\n */\nexport class Resize extends BaseFilter<'Resize', ResizeOwnProps> {\n /**\n * Resize type\n * for webgl resizeType is just lanczos, for canvas2d can be:\n * bilinear, hermite, sliceHack, lanczos.\n * @default\n */\n declare resizeType: ResizeOwnProps['resizeType'];\n\n /**\n * Scale factor for resizing, x axis\n * @param {Number} scaleX\n * @default\n */\n declare scaleX: ResizeOwnProps['scaleX'];\n\n /**\n * Scale factor for resizing, y axis\n * @param {Number} scaleY\n * @default\n */\n declare scaleY: ResizeOwnProps['scaleY'];\n\n /**\n * LanczosLobes parameter for lanczos filter, valid for resizeType lanczos\n * @param {Number} lanczosLobes\n * @default\n */\n declare lanczosLobes: ResizeOwnProps['lanczosLobes'];\n\n static type = 'Resize';\n\n static defaults = resizeDefaultValues;\n\n static uniformLocations = ['uDelta', 'uTaps'];\n\n /**\n * Send data from this filter to its shader program's uniforms.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n this: ResizeDuringWEBGLResize,\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap,\n ) {\n gl.uniform2fv(\n uniformLocations.uDelta,\n this.horizontal ? [1 / this.width, 0] : [0, 1 / this.height],\n );\n gl.uniform1fv(uniformLocations.uTaps, this.taps);\n }\n\n getFilterWindow(this: ResizeDuringWEBGLResize) {\n const scale = this.tempScale;\n return Math.ceil(this.lanczosLobes / scale);\n }\n\n getCacheKey(this: ResizeDuringWEBGLResize): string {\n const filterWindow = this.getFilterWindow();\n return `${this.type}_${filterWindow}`;\n }\n\n getFragmentSource(this: ResizeDuringWEBGLResize): string {\n const filterWindow = this.getFilterWindow();\n return this.generateShader(filterWindow);\n }\n\n getTaps(this: ResizeDuringWEBGLResize) {\n const lobeFunction = this.lanczosCreate(this.lanczosLobes),\n scale = this.tempScale,\n filterWindow = this.getFilterWindow(),\n taps = new Array(filterWindow);\n for (let i = 1; i <= filterWindow; i++) {\n taps[i - 1] = lobeFunction(i * scale);\n }\n return taps;\n }\n\n /**\n * Generate vertex and shader sources from the necessary steps numbers\n * @param {Number} filterWindow\n */\n generateShader(filterWindow: number) {\n const offsets = new Array(filterWindow);\n for (let i = 1; i <= filterWindow; i++) {\n offsets[i - 1] = `${i}.0 * uDelta`;\n }\n return `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec2 uDelta;\n varying vec2 vTexCoord;\n uniform float uTaps[${filterWindow}];\n void main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float sum = 1.0;\n ${offsets\n .map(\n (offset, i) => `\n color += texture2D(uTexture, vTexCoord + ${offset}) * uTaps[${i}] + texture2D(uTexture, vTexCoord - ${offset}) * uTaps[${i}];\n sum += 2.0 * uTaps[${i}];\n `,\n )\n .join('\\n')}\n gl_FragColor = color / sum;\n }\n `;\n }\n\n applyToForWebgl(this: ResizeDuringWEBGLResize, options: TWebGLPipelineState) {\n options.passes++;\n this.width = options.sourceWidth;\n this.horizontal = true;\n this.dW = Math.round(this.width * this.scaleX);\n this.dH = options.sourceHeight;\n this.tempScale = this.dW / this.width;\n this.taps = this.getTaps();\n options.destinationWidth = this.dW;\n super.applyTo(options);\n options.sourceWidth = options.destinationWidth;\n\n this.height = options.sourceHeight;\n this.horizontal = false;\n this.dH = Math.round(this.height * this.scaleY);\n this.tempScale = this.dH / this.height;\n this.taps = this.getTaps();\n options.destinationHeight = this.dH;\n super.applyTo(options);\n options.sourceHeight = options.destinationHeight;\n }\n\n /**\n * Apply the resize filter to the image\n * Determines whether to use WebGL or Canvas2D based on the options.webgl flag.\n *\n * @param {Object} options\n * @param {Number} options.passes The number of filters remaining to be executed\n * @param {Boolean} options.webgl Whether to use webgl to render the filter.\n * @param {WebGLTexture} options.sourceTexture The texture setup as the source to be filtered.\n * @param {WebGLTexture} options.targetTexture The texture where filtered output should be drawn.\n * @param {WebGLRenderingContext} options.context The GL context used for rendering.\n * @param {Object} options.programCache A map of compiled shader programs, keyed by filter type.\n */\n applyTo(options: TWebGLPipelineState | T2DPipelineState) {\n if (isWebGLPipelineState(options)) {\n (this as unknown as ResizeDuringWEBGLResize).applyToForWebgl(options);\n } else {\n (this as unknown as ResizeDuring2DResize).applyTo2d(options);\n }\n }\n\n isNeutralState() {\n return this.scaleX === 1 && this.scaleY === 1;\n }\n\n lanczosCreate(lobes: number) {\n return (x: number) => {\n if (x >= lobes || x <= -lobes) {\n return 0.0;\n }\n if (x < 1.1920929e-7 && x > -1.1920929e-7) {\n return 1.0;\n }\n x *= Math.PI;\n const xx = x / lobes;\n return ((Math.sin(x) / x) * Math.sin(xx)) / xx;\n };\n }\n\n applyTo2d(this: ResizeDuring2DResize, options: T2DPipelineState) {\n const imageData = options.imageData,\n scaleX = this.scaleX,\n scaleY = this.scaleY;\n\n this.rcpScaleX = 1 / scaleX;\n this.rcpScaleY = 1 / scaleY;\n\n const oW = imageData.width;\n const oH = imageData.height;\n const dW = Math.round(oW * scaleX);\n const dH = Math.round(oH * scaleY);\n let newData: ImageData;\n\n if (this.resizeType === 'sliceHack') {\n newData = this.sliceByTwo(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'hermite') {\n newData = this.hermiteFastResize(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'bilinear') {\n newData = this.bilinearFiltering(options, oW, oH, dW, dH);\n } else if (this.resizeType === 'lanczos') {\n newData = this.lanczosResize(options, oW, oH, dW, dH);\n } else {\n // this should never trigger, is here just for safety net.\n newData = new ImageData(dW, dH);\n }\n options.imageData = newData;\n }\n\n /**\n * Filter sliceByTwo\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n sliceByTwo(\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ) {\n const imageData = options.imageData;\n const mult = 0.5;\n let doneW = false;\n let doneH = false;\n let stepW = oW * mult;\n let stepH = oH * mult;\n const resources = options.filterBackend.resources;\n let sX = 0;\n let sY = 0;\n const dX = oW;\n let dY = 0;\n if (!resources.sliceByTwo) {\n resources.sliceByTwo = createCanvasElement();\n }\n const tmpCanvas = resources.sliceByTwo;\n if (tmpCanvas.width < oW * 1.5 || tmpCanvas.height < oH) {\n tmpCanvas.width = oW * 1.5;\n tmpCanvas.height = oH;\n }\n const ctx = tmpCanvas.getContext('2d')!;\n ctx.clearRect(0, 0, oW * 1.5, oH);\n ctx.putImageData(imageData, 0, 0);\n\n dW = Math.floor(dW);\n dH = Math.floor(dH);\n\n while (!doneW || !doneH) {\n oW = stepW;\n oH = stepH;\n if (dW < Math.floor(stepW * mult)) {\n stepW = Math.floor(stepW * mult);\n } else {\n stepW = dW;\n doneW = true;\n }\n if (dH < Math.floor(stepH * mult)) {\n stepH = Math.floor(stepH * mult);\n } else {\n stepH = dH;\n doneH = true;\n }\n ctx.drawImage(tmpCanvas, sX, sY, oW, oH, dX, dY, stepW, stepH);\n sX = dX;\n sY = dY;\n dY += stepH;\n }\n return ctx.getImageData(sX, sY, dW, dH);\n }\n\n /**\n * Filter lanczosResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n lanczosResize(\n this: ResizeDuring2DResize,\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ): ImageData {\n function process(u: number): ImageData {\n let v, i, weight, idx, a, red, green, blue, alpha, fX, fY;\n center.x = (u + 0.5) * ratioX;\n icenter.x = Math.floor(center.x);\n for (v = 0; v < dH; v++) {\n center.y = (v + 0.5) * ratioY;\n icenter.y = Math.floor(center.y);\n a = 0;\n red = 0;\n green = 0;\n blue = 0;\n alpha = 0;\n for (i = icenter.x - range2X; i <= icenter.x + range2X; i++) {\n if (i < 0 || i >= oW) {\n continue;\n }\n fX = Math.floor(1000 * Math.abs(i - center.x));\n if (!cacheLanc[fX]) {\n cacheLanc[fX] = {};\n }\n for (let j = icenter.y - range2Y; j <= icenter.y + range2Y; j++) {\n if (j < 0 || j >= oH) {\n continue;\n }\n fY = Math.floor(1000 * Math.abs(j - center.y));\n if (!cacheLanc[fX][fY]) {\n cacheLanc[fX][fY] = lanczos(\n Math.sqrt(\n Math.pow(fX * rcpRatioX, 2) + Math.pow(fY * rcpRatioY, 2),\n ) / 1000,\n );\n }\n weight = cacheLanc[fX][fY];\n if (weight > 0) {\n idx = (j * oW + i) * 4;\n a += weight;\n red += weight * srcData[idx];\n green += weight * srcData[idx + 1];\n blue += weight * srcData[idx + 2];\n alpha += weight * srcData[idx + 3];\n }\n }\n }\n idx = (v * dW + u) * 4;\n destData[idx] = red / a;\n destData[idx + 1] = green / a;\n destData[idx + 2] = blue / a;\n destData[idx + 3] = alpha / a;\n }\n\n if (++u < dW) {\n return process(u);\n } else {\n return destImg;\n }\n }\n\n const srcData = options.imageData.data,\n destImg = options.ctx.createImageData(dW, dH),\n destData = destImg.data,\n lanczos = this.lanczosCreate(this.lanczosLobes),\n ratioX = this.rcpScaleX,\n ratioY = this.rcpScaleY,\n rcpRatioX = 2 / this.rcpScaleX,\n rcpRatioY = 2 / this.rcpScaleY,\n range2X = Math.ceil((ratioX * this.lanczosLobes) / 2),\n range2Y = Math.ceil((ratioY * this.lanczosLobes) / 2),\n cacheLanc: Record<number, Record<number, number>> = {},\n center: XY = { x: 0, y: 0 },\n icenter: XY = { x: 0, y: 0 };\n\n return process(0);\n }\n\n /**\n * bilinearFiltering\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n bilinearFiltering(\n this: ResizeDuring2DResize,\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ) {\n let a;\n let b;\n let c;\n let d;\n let x;\n let y;\n let i;\n let j;\n let xDiff;\n let yDiff;\n let chnl;\n let color;\n let offset = 0;\n let origPix;\n const ratioX = this.rcpScaleX;\n const ratioY = this.rcpScaleY;\n const w4 = 4 * (oW - 1);\n const img = options.imageData;\n const pixels = img.data;\n const destImage = options.ctx.createImageData(dW, dH);\n const destPixels = destImage.data;\n for (i = 0; i < dH; i++) {\n for (j = 0; j < dW; j++) {\n x = Math.floor(ratioX * j);\n y = Math.floor(ratioY * i);\n xDiff = ratioX * j - x;\n yDiff = ratioY * i - y;\n origPix = 4 * (y * oW + x);\n\n for (chnl = 0; chnl < 4; chnl++) {\n a = pixels[origPix + chnl];\n b = pixels[origPix + 4 + chnl];\n c = pixels[origPix + w4 + chnl];\n d = pixels[origPix + w4 + 4 + chnl];\n color =\n a * (1 - xDiff) * (1 - yDiff) +\n b * xDiff * (1 - yDiff) +\n c * yDiff * (1 - xDiff) +\n d * xDiff * yDiff;\n destPixels[offset++] = color;\n }\n }\n }\n return destImage;\n }\n\n /**\n * hermiteFastResize\n * @param {Object} canvasEl Canvas element to apply filter to\n * @param {Number} oW Original Width\n * @param {Number} oH Original Height\n * @param {Number} dW Destination Width\n * @param {Number} dH Destination Height\n * @returns {ImageData}\n */\n hermiteFastResize(\n this: ResizeDuring2DResize,\n options: T2DPipelineState,\n oW: number,\n oH: number,\n dW: number,\n dH: number,\n ) {\n const ratioW = this.rcpScaleX,\n ratioH = this.rcpScaleY,\n ratioWHalf = Math.ceil(ratioW / 2),\n ratioHHalf = Math.ceil(ratioH / 2),\n img = options.imageData,\n data = img.data,\n img2 = options.ctx.createImageData(dW, dH),\n data2 = img2.data;\n for (let j = 0; j < dH; j++) {\n for (let i = 0; i < dW; i++) {\n const x2 = (i + j * dW) * 4;\n let weight = 0;\n let weights = 0;\n let weightsAlpha = 0;\n let gxR = 0;\n let gxG = 0;\n let gxB = 0;\n let gxA = 0;\n const centerY = (j + 0.5) * ratioH;\n for (let yy = Math.floor(j * ratioH); yy < (j + 1) * ratioH; yy++) {\n const dy = Math.abs(centerY - (yy + 0.5)) / ratioHHalf,\n centerX = (i + 0.5) * ratioW,\n w0 = dy * dy;\n for (let xx = Math.floor(i * ratioW); xx < (i + 1) * ratioW; xx++) {\n let dx = Math.abs(centerX - (xx + 0.5)) / ratioWHalf;\n const w = Math.sqrt(w0 + dx * dx);\n /* eslint-disable max-depth */\n if (w > 1 && w < -1) {\n continue;\n }\n //hermite filter\n weight = 2 * w * w * w - 3 * w * w + 1;\n if (weight > 0) {\n dx = 4 * (xx + yy * oW);\n //alpha\n gxA += weight * data[dx + 3];\n weightsAlpha += weight;\n //colors\n if (data[dx + 3] < 255) {\n weight = (weight * data[dx + 3]) / 250;\n }\n gxR += weight * data[dx];\n gxG += weight * data[dx + 1];\n gxB += weight * data[dx + 2];\n weights += weight;\n }\n /* eslint-enable max-depth */\n }\n }\n data2[x2] = gxR / weights;\n data2[x2 + 1] = gxG / weights;\n data2[x2 + 2] = gxB / weights;\n data2[x2 + 3] = gxA / weightsAlpha;\n }\n }\n return img2;\n }\n}\n\nclassRegistry.setClass(Resize);\n"],"names":["resizeDefaultValues","resizeType","scaleX","scaleY","lanczosLobes","Resize","BaseFilter","sendUniformData","gl","uniformLocations","uniform2fv","uDelta","horizontal","width","height","uniform1fv","uTaps","taps","getFilterWindow","scale","tempScale","Math","ceil","getCacheKey","filterWindow","concat","type","getFragmentSource","generateShader","getTaps","lobeFunction","lanczosCreate","Array","i","offsets","map","offset","join","applyToForWebgl","options","passes","sourceWidth","dW","round","dH","sourceHeight","destinationWidth","applyTo","destinationHeight","isWebGLPipelineState","applyTo2d","isNeutralState","lobes","x","PI","xx","sin","imageData","rcpScaleX","rcpScaleY","oW","oH","newData","sliceByTwo","hermiteFastResize","bilinearFiltering","lanczosResize","ImageData","mult","doneW","doneH","stepW","stepH","resources","filterBackend","sX","sY","dX","dY","createCanvasElement","tmpCanvas","ctx","getContext","clearRect","putImageData","floor","drawImage","getImageData","process","u","v","weight","idx","a","red","green","blue","alpha","fX","fY","center","ratioX","icenter","y","ratioY","range2X","abs","cacheLanc","j","range2Y","lanczos","sqrt","pow","rcpRatioX","rcpRatioY","srcData","destData","destImg","data","createImageData","b","c","d","xDiff","yDiff","chnl","color","origPix","w4","img","pixels","destImage","destPixels","ratioW","ratioH","ratioWHalf","ratioHHalf","img2","data2","x2","weights","weightsAlpha","gxR","gxG","gxB","gxA","centerY","yy","dy","centerX","w0","dx","w","_defineProperty","classRegistry","setClass"],"mappings":"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"}