@postermywall/fabricjs-2 6.0.0-rc2.0 → 6.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +18 -1
- package/dist/index.js +229 -491
- package/dist/index.js.map +1 -1
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/index.min.mjs +1 -1
- package/dist/index.min.mjs.map +1 -1
- package/dist/index.mjs +229 -491
- package/dist/index.mjs.map +1 -1
- package/dist/index.node.cjs +229 -491
- package/dist/index.node.cjs.map +1 -1
- package/dist/index.node.mjs +229 -491
- package/dist/index.node.mjs.map +1 -1
- package/dist/package.json.min.mjs +1 -1
- package/dist/package.json.mjs +1 -1
- package/dist/src/canvas/Canvas.d.ts.map +1 -1
- package/dist/src/canvas/Canvas.min.mjs +1 -1
- package/dist/src/canvas/Canvas.min.mjs.map +1 -1
- package/dist/src/canvas/Canvas.mjs +8 -9
- package/dist/src/canvas/Canvas.mjs.map +1 -1
- package/dist/src/canvas/SelectableCanvas.d.ts +1 -1
- package/dist/src/canvas/SelectableCanvas.d.ts.map +1 -1
- package/dist/src/canvas/SelectableCanvas.min.mjs +1 -1
- package/dist/src/canvas/SelectableCanvas.min.mjs.map +1 -1
- package/dist/src/canvas/SelectableCanvas.mjs +1 -1
- package/dist/src/canvas/SelectableCanvas.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvas.d.ts +4 -4
- package/dist/src/canvas/StaticCanvas.d.ts.map +1 -1
- package/dist/src/canvas/StaticCanvas.min.mjs +1 -1
- package/dist/src/canvas/StaticCanvas.min.mjs.map +1 -1
- package/dist/src/canvas/StaticCanvas.mjs +0 -13
- package/dist/src/canvas/StaticCanvas.mjs.map +1 -1
- package/dist/src/color/Color.d.ts +1 -0
- package/dist/src/color/Color.d.ts.map +1 -1
- package/dist/src/color/Color.min.mjs +1 -1
- package/dist/src/color/Color.min.mjs.map +1 -1
- package/dist/src/color/Color.mjs +3 -1
- package/dist/src/color/Color.mjs.map +1 -1
- package/dist/src/filters/BaseFilter.d.ts +16 -23
- package/dist/src/filters/BaseFilter.d.ts.map +1 -1
- package/dist/src/filters/BaseFilter.min.mjs +1 -1
- package/dist/src/filters/BaseFilter.min.mjs.map +1 -1
- package/dist/src/filters/BaseFilter.mjs +24 -41
- package/dist/src/filters/BaseFilter.mjs.map +1 -1
- package/dist/src/filters/BlendColor.d.ts +13 -24
- package/dist/src/filters/BlendColor.d.ts.map +1 -1
- package/dist/src/filters/BlendColor.min.mjs +1 -1
- package/dist/src/filters/BlendColor.min.mjs.map +1 -1
- package/dist/src/filters/BlendColor.mjs +1 -25
- package/dist/src/filters/BlendColor.mjs.map +1 -1
- package/dist/src/filters/BlendImage.d.ts +18 -19
- package/dist/src/filters/BlendImage.d.ts.map +1 -1
- package/dist/src/filters/BlendImage.min.mjs +1 -1
- package/dist/src/filters/BlendImage.min.mjs.map +1 -1
- package/dist/src/filters/BlendImage.mjs +13 -24
- package/dist/src/filters/BlendImage.mjs.map +1 -1
- package/dist/src/filters/Blur.d.ts +10 -12
- package/dist/src/filters/Blur.d.ts.map +1 -1
- package/dist/src/filters/Blur.min.mjs +1 -1
- package/dist/src/filters/Blur.min.mjs.map +1 -1
- package/dist/src/filters/Blur.mjs +5 -14
- package/dist/src/filters/Blur.mjs.map +1 -1
- package/dist/src/filters/Boilerplate.d.ts +11 -13
- package/dist/src/filters/Boilerplate.d.ts.map +1 -1
- package/dist/src/filters/Brightness.d.ts +10 -12
- package/dist/src/filters/Brightness.d.ts.map +1 -1
- package/dist/src/filters/Brightness.min.mjs +1 -1
- package/dist/src/filters/Brightness.min.mjs.map +1 -1
- package/dist/src/filters/Brightness.mjs +4 -16
- package/dist/src/filters/Brightness.mjs.map +1 -1
- package/dist/src/filters/Canvas2dFilterBackend.d.ts +1 -1
- package/dist/src/filters/Canvas2dFilterBackend.d.ts.map +1 -1
- package/dist/src/filters/Canvas2dFilterBackend.min.mjs.map +1 -1
- package/dist/src/filters/Canvas2dFilterBackend.mjs.map +1 -1
- package/dist/src/filters/ColorMatrix.d.ts +17 -15
- package/dist/src/filters/ColorMatrix.d.ts.map +1 -1
- package/dist/src/filters/ColorMatrix.min.mjs +1 -1
- package/dist/src/filters/ColorMatrix.min.mjs.map +1 -1
- package/dist/src/filters/ColorMatrix.mjs +7 -27
- package/dist/src/filters/ColorMatrix.mjs.map +1 -1
- package/dist/src/filters/ColorMatrixFilters.d.ts +63 -497
- package/dist/src/filters/ColorMatrixFilters.d.ts.map +1 -1
- package/dist/src/filters/ColorMatrixFilters.min.mjs +1 -1
- package/dist/src/filters/ColorMatrixFilters.min.mjs.map +1 -1
- package/dist/src/filters/ColorMatrixFilters.mjs +13 -8
- package/dist/src/filters/ColorMatrixFilters.mjs.map +1 -1
- package/dist/src/filters/Composed.d.ts +11 -10
- package/dist/src/filters/Composed.d.ts.map +1 -1
- package/dist/src/filters/Composed.min.mjs +1 -1
- package/dist/src/filters/Composed.min.mjs.map +1 -1
- package/dist/src/filters/Composed.mjs +7 -12
- package/dist/src/filters/Composed.mjs.map +1 -1
- package/dist/src/filters/Contrast.d.ts +10 -12
- package/dist/src/filters/Contrast.d.ts.map +1 -1
- package/dist/src/filters/Contrast.min.mjs +1 -1
- package/dist/src/filters/Contrast.min.mjs.map +1 -1
- package/dist/src/filters/Contrast.mjs +6 -17
- package/dist/src/filters/Contrast.mjs.map +1 -1
- package/dist/src/filters/Convolute.d.ts +11 -14
- package/dist/src/filters/Convolute.d.ts.map +1 -1
- package/dist/src/filters/Convolute.min.mjs +1 -1
- package/dist/src/filters/Convolute.min.mjs.map +1 -1
- package/dist/src/filters/Convolute.mjs +1 -15
- package/dist/src/filters/Convolute.mjs.map +1 -1
- package/dist/src/filters/Gamma.d.ts +17 -14
- package/dist/src/filters/Gamma.d.ts.map +1 -1
- package/dist/src/filters/Gamma.min.mjs +1 -1
- package/dist/src/filters/Gamma.min.mjs.map +1 -1
- package/dist/src/filters/Gamma.mjs +20 -24
- package/dist/src/filters/Gamma.mjs.map +1 -1
- package/dist/src/filters/Grayscale.d.ts +8 -11
- package/dist/src/filters/Grayscale.d.ts.map +1 -1
- package/dist/src/filters/Grayscale.min.mjs +1 -1
- package/dist/src/filters/Grayscale.min.mjs.map +1 -1
- package/dist/src/filters/Grayscale.mjs +2 -14
- package/dist/src/filters/Grayscale.mjs.map +1 -1
- package/dist/src/filters/HueRotation.d.ts +11 -5
- package/dist/src/filters/HueRotation.d.ts.map +1 -1
- package/dist/src/filters/HueRotation.min.mjs +1 -1
- package/dist/src/filters/HueRotation.min.mjs.map +1 -1
- package/dist/src/filters/HueRotation.mjs +10 -5
- package/dist/src/filters/HueRotation.mjs.map +1 -1
- package/dist/src/filters/Invert.d.ts +10 -13
- package/dist/src/filters/Invert.d.ts.map +1 -1
- package/dist/src/filters/Invert.min.mjs +1 -1
- package/dist/src/filters/Invert.min.mjs.map +1 -1
- package/dist/src/filters/Invert.mjs +2 -15
- package/dist/src/filters/Invert.mjs.map +1 -1
- package/dist/src/filters/Noise.d.ts +9 -20
- package/dist/src/filters/Noise.d.ts.map +1 -1
- package/dist/src/filters/Noise.min.mjs +1 -1
- package/dist/src/filters/Noise.min.mjs.map +1 -1
- package/dist/src/filters/Noise.mjs +4 -27
- package/dist/src/filters/Noise.mjs.map +1 -1
- package/dist/src/filters/Pixelate.d.ts +8 -12
- package/dist/src/filters/Pixelate.d.ts.map +1 -1
- package/dist/src/filters/Pixelate.min.mjs +1 -1
- package/dist/src/filters/Pixelate.min.mjs.map +1 -1
- package/dist/src/filters/Pixelate.mjs +2 -16
- package/dist/src/filters/Pixelate.mjs.map +1 -1
- package/dist/src/filters/RemoveColor.d.ts +12 -23
- package/dist/src/filters/RemoveColor.d.ts.map +1 -1
- package/dist/src/filters/RemoveColor.min.mjs +1 -1
- package/dist/src/filters/RemoveColor.min.mjs.map +1 -1
- package/dist/src/filters/RemoveColor.mjs +2 -25
- package/dist/src/filters/RemoveColor.mjs.map +1 -1
- package/dist/src/filters/Resize.d.ts +14 -30
- package/dist/src/filters/Resize.d.ts.map +1 -1
- package/dist/src/filters/Resize.min.mjs +1 -1
- package/dist/src/filters/Resize.min.mjs.map +1 -1
- package/dist/src/filters/Resize.mjs +3 -30
- package/dist/src/filters/Resize.mjs.map +1 -1
- package/dist/src/filters/Saturation.d.ts +9 -12
- package/dist/src/filters/Saturation.d.ts.map +1 -1
- package/dist/src/filters/Saturation.min.mjs +1 -1
- package/dist/src/filters/Saturation.min.mjs.map +1 -1
- package/dist/src/filters/Saturation.mjs +8 -20
- package/dist/src/filters/Saturation.mjs.map +1 -1
- package/dist/src/filters/Vibrance.d.ts +10 -13
- package/dist/src/filters/Vibrance.d.ts.map +1 -1
- package/dist/src/filters/Vibrance.min.mjs +1 -1
- package/dist/src/filters/Vibrance.min.mjs.map +1 -1
- package/dist/src/filters/Vibrance.mjs +6 -18
- package/dist/src/filters/Vibrance.mjs.map +1 -1
- package/dist/src/filters/WebGLFilterBackend.d.ts +1 -1
- package/dist/src/filters/WebGLFilterBackend.d.ts.map +1 -1
- package/dist/src/filters/WebGLFilterBackend.min.mjs.map +1 -1
- package/dist/src/filters/WebGLFilterBackend.mjs.map +1 -1
- package/dist/src/filters/shaders/blendImage.d.ts +1 -0
- package/dist/src/filters/shaders/blendImage.d.ts.map +1 -1
- package/dist/src/filters/shaders/blendImage.min.mjs +1 -1
- package/dist/src/filters/shaders/blendImage.min.mjs.map +1 -1
- package/dist/src/filters/shaders/blendImage.mjs +2 -1
- package/dist/src/filters/shaders/blendImage.mjs.map +1 -1
- package/dist/src/filters/typedefs.d.ts +22 -0
- package/dist/src/filters/typedefs.d.ts.map +1 -1
- package/dist/src/parser/elements_parser.d.ts +1 -1
- package/dist/src/parser/elements_parser.d.ts.map +1 -1
- package/dist/src/parser/elements_parser.min.mjs.map +1 -1
- package/dist/src/parser/elements_parser.mjs.map +1 -1
- package/dist/src/shapes/ActiveSelection.d.ts +1 -1
- package/dist/src/shapes/ActiveSelection.d.ts.map +1 -1
- package/dist/src/shapes/ActiveSelection.min.mjs +1 -1
- package/dist/src/shapes/ActiveSelection.min.mjs.map +1 -1
- package/dist/src/shapes/ActiveSelection.mjs +13 -10
- package/dist/src/shapes/ActiveSelection.mjs.map +1 -1
- package/dist/src/shapes/Group.d.ts +9 -0
- package/dist/src/shapes/Group.d.ts.map +1 -1
- package/dist/src/shapes/Group.min.mjs +1 -1
- package/dist/src/shapes/Group.min.mjs.map +1 -1
- package/dist/src/shapes/Group.mjs +10 -1
- package/dist/src/shapes/Group.mjs.map +1 -1
- package/dist/src/shapes/Image.d.ts +4 -4
- package/dist/src/shapes/Image.d.ts.map +1 -1
- package/dist/src/shapes/Image.min.mjs.map +1 -1
- package/dist/src/shapes/Image.mjs.map +1 -1
- package/dist/src/shapes/Object/InteractiveObject.d.ts +3 -0
- package/dist/src/shapes/Object/InteractiveObject.d.ts.map +1 -1
- package/dist/src/shapes/Object/InteractiveObject.min.mjs +1 -1
- package/dist/src/shapes/Object/InteractiveObject.min.mjs.map +1 -1
- package/dist/src/shapes/Object/InteractiveObject.mjs +3 -1
- package/dist/src/shapes/Object/InteractiveObject.mjs.map +1 -1
- package/dist/src/shapes/Object/Object.d.ts +1 -16
- package/dist/src/shapes/Object/Object.d.ts.map +1 -1
- package/dist/src/shapes/Object/Object.min.mjs +1 -1
- package/dist/src/shapes/Object/Object.min.mjs.map +1 -1
- package/dist/src/shapes/Object/Object.mjs +9 -10
- package/dist/src/shapes/Object/Object.mjs.map +1 -1
- package/dist/src/shapes/Object/StackedObject.d.ts +8 -15
- package/dist/src/shapes/Object/StackedObject.d.ts.map +1 -1
- package/dist/src/shapes/Object/StackedObject.min.mjs +1 -1
- package/dist/src/shapes/Object/StackedObject.min.mjs.map +1 -1
- package/dist/src/shapes/Object/StackedObject.mjs +11 -21
- package/dist/src/shapes/Object/StackedObject.mjs.map +1 -1
- package/dist/src/shapes/Path.d.ts +2 -2
- package/dist/src/shapes/Path.d.ts.map +1 -1
- package/dist/src/shapes/Path.min.mjs.map +1 -1
- package/dist/src/shapes/Path.mjs +2 -2
- package/dist/src/shapes/Path.mjs.map +1 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.d.ts +1 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.d.ts.map +1 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.min.mjs.map +1 -1
- package/dist/src/shapes/Text/TextSVGExportMixin.mjs.map +1 -1
- package/dist/src/util/misc/objectEnlive.d.ts +2 -2
- package/dist/src/util/misc/objectEnlive.d.ts.map +1 -1
- package/dist/src/util/misc/objectEnlive.min.mjs.map +1 -1
- package/dist/src/util/misc/objectEnlive.mjs.map +1 -1
- package/package.json +2 -2
- package/src/canvas/Canvas.ts +6 -9
- package/src/canvas/SelectableCanvas.ts +2 -2
- package/src/canvas/StaticCanvas.ts +4 -18
- package/src/color/Color.ts +2 -1
- package/src/color/color.test.ts +6 -0
- package/src/filters/BaseFilter.ts +45 -51
- package/src/filters/BlendColor.ts +13 -35
- package/src/filters/BlendImage.ts +26 -40
- package/src/filters/Blur.ts +13 -20
- package/src/filters/Boilerplate.ts +13 -22
- package/src/filters/Brightness.ts +12 -21
- package/src/filters/Canvas2dFilterBackend.ts +1 -1
- package/src/filters/ColorMatrix.ts +29 -34
- package/src/filters/ColorMatrixFilters.ts +15 -9
- package/src/filters/Composed.ts +26 -16
- package/src/filters/Contrast.ts +15 -23
- package/src/filters/Convolute.ts +11 -23
- package/src/filters/Gamma.ts +32 -24
- package/src/filters/Grayscale.ts +8 -19
- package/src/filters/HueRotation.ts +21 -11
- package/src/filters/Invert.ts +11 -22
- package/src/filters/Noise.ts +11 -30
- package/src/filters/Pixelate.ts +9 -22
- package/src/filters/RemoveColor.ts +21 -35
- package/src/filters/Resize.ts +20 -44
- package/src/filters/Saturation.ts +16 -27
- package/src/filters/Vibrance.ts +14 -24
- package/src/filters/WebGLFilterBackend.ts +1 -1
- package/src/filters/shaders/blendImage.ts +12 -0
- package/src/filters/typedefs.ts +23 -0
- package/src/parser/elements_parser.ts +1 -1
- package/src/shapes/ActiveSelection.ts +8 -4
- package/src/shapes/Group.ts +16 -1
- package/src/shapes/Image.ts +8 -6
- package/src/shapes/Object/InteractiveObject.ts +3 -1
- package/src/shapes/Object/Object.ts +10 -35
- package/src/shapes/Object/StackedObject.ts +28 -44
- package/src/shapes/Path.ts +4 -4
- package/src/shapes/Text/TextSVGExportMixin.ts +1 -1
- package/src/util/misc/objectEnlive.ts +12 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Resize.mjs","sources":["../../../src/filters/Resize.ts"],"sourcesContent":["import type { TClassProperties } from '../typedefs';\nimport { 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 const resizeDefaultValues: Partial<TClassProperties<Resize>> = {\n resizeType: 'hermite',\n scaleX: 1,\n scaleY: 1,\n lanczosLobes: 3,\n fragmentSourceTOP: `\n precision highp float;\n uniform sampler2D uTexture;\n uniform vec2 uDelta;\n varying vec2 vTexCoord;\n `,\n};\n\nexport type TResizeType = 'bilinear' | 'hermite' | 'sliceHack' | 'lanczos';\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 {\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: TResizeType;\n\n /**\n * Scale factor for resizing, x axis\n * @param {Number} scaleX\n * @default\n */\n declare scaleX: number;\n\n /**\n * Scale factor for resizing, y axis\n * @param {Number} scaleY\n * @default\n */\n declare scaleY: number;\n\n /**\n * LanczosLobes parameter for lanczos filter, valid for resizeType lanczos\n * @param {Number} lanczosLobes\n * @default\n */\n declare lanczosLobes: number;\n\n declare fragmentSourceTOP: string;\n\n static type = 'Resize';\n\n static defaults = resizeDefaultValues;\n\n /**\n * Return WebGL uniform locations for this filter's shader.\n *\n * @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.\n * @param {WebGLShaderProgram} program This filter's compiled shader program.\n */\n getUniformLocations(gl: WebGLRenderingContext, program: WebGLProgram) {\n return {\n uDelta: gl.getUniformLocation(program, 'uDelta'),\n uTaps: gl.getUniformLocation(program, 'uTaps'),\n };\n }\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 ${this.fragmentSourceTOP}\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 /**\n * Returns object representation of an instance\n * @return {Object} Object representation of an instance\n */\n toObject() {\n return {\n type: this.type,\n scaleX: this.scaleX,\n scaleY: this.scaleY,\n resizeType: this.resizeType,\n lanczosLobes: this.lanczosLobes,\n };\n }\n}\n\nclassRegistry.setClass(Resize);\n"],"names":["resizeDefaultValues","resizeType","scaleX","scaleY","lanczosLobes","fragmentSourceTOP","Resize","BaseFilter","getUniformLocations","gl","program","uDelta","getUniformLocation","uTaps","sendUniformData","uniformLocations","uniform2fv","horizontal","width","height","uniform1fv","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","toObject","_defineProperty","classRegistry","setClass"],"mappings":"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"}
|
|
1
|
+
{"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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"}
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
import type { TClassProperties } from '../typedefs';
|
|
2
1
|
import { BaseFilter } from './BaseFilter';
|
|
3
2
|
import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
|
|
3
|
+
export type SaturationOwnProps = {
|
|
4
|
+
saturation: number;
|
|
5
|
+
};
|
|
6
|
+
export declare const saturationDefaultValues: SaturationOwnProps;
|
|
4
7
|
/**
|
|
5
8
|
* Saturate filter class
|
|
6
9
|
* @example
|
|
@@ -10,8 +13,7 @@ import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
|
|
|
10
13
|
* object.filters.push(filter);
|
|
11
14
|
* object.applyFilters();
|
|
12
15
|
*/
|
|
13
|
-
export declare
|
|
14
|
-
export declare class Saturation extends BaseFilter {
|
|
16
|
+
export declare class Saturation extends BaseFilter<'Saturation', SaturationOwnProps> {
|
|
15
17
|
/**
|
|
16
18
|
* Saturation value, from -1 to 1.
|
|
17
19
|
* Increases/decreases the color saturation.
|
|
@@ -20,9 +22,10 @@ export declare class Saturation extends BaseFilter {
|
|
|
20
22
|
* @param {Number} saturation
|
|
21
23
|
* @default
|
|
22
24
|
*/
|
|
23
|
-
saturation:
|
|
25
|
+
saturation: SaturationOwnProps['saturation'];
|
|
24
26
|
static type: string;
|
|
25
|
-
static defaults:
|
|
27
|
+
static defaults: SaturationOwnProps;
|
|
28
|
+
static uniformLocations: string[];
|
|
26
29
|
getFragmentSource(): string;
|
|
27
30
|
/**
|
|
28
31
|
* Apply the Saturation operation to a Uint8ClampedArray representing the pixels of an image.
|
|
@@ -31,13 +34,6 @@ export declare class Saturation extends BaseFilter {
|
|
|
31
34
|
* @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.
|
|
32
35
|
*/
|
|
33
36
|
applyTo2d({ imageData: { data } }: T2DPipelineState): void;
|
|
34
|
-
/**
|
|
35
|
-
* Return WebGL uniform locations for this filter's shader.
|
|
36
|
-
*
|
|
37
|
-
* @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
|
|
38
|
-
* @param {WebGLShaderProgram} program This filter's compiled shader program.
|
|
39
|
-
*/
|
|
40
|
-
getUniformLocations(gl: WebGLRenderingContext, program: WebGLProgram): TWebGLUniformLocationMap;
|
|
41
37
|
/**
|
|
42
38
|
* Send data from this filter to its shader program's uniforms.
|
|
43
39
|
*
|
|
@@ -45,5 +41,6 @@ export declare class Saturation extends BaseFilter {
|
|
|
45
41
|
* @param {Object} uniformLocations A map of string uniform names to WebGLUniformLocation objects
|
|
46
42
|
*/
|
|
47
43
|
sendUniformData(gl: WebGLRenderingContext, uniformLocations: TWebGLUniformLocationMap): void;
|
|
44
|
+
isNeutralState(): boolean;
|
|
48
45
|
}
|
|
49
46
|
//# sourceMappingURL=Saturation.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Saturation.d.ts","sourceRoot":"","sources":["../../../src/filters/Saturation.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Saturation.d.ts","sourceRoot":"","sources":["../../../src/filters/Saturation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAI7E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,kBAErC,CAAC;AAEF;;;;;;;;GAQG;AACH,qBAAa,UAAW,SAAQ,UAAU,CAAC,YAAY,EAAE,kBAAkB,CAAC;IAC1E;;;;;;;OAOG;IACK,UAAU,EAAE,kBAAkB,CAAC,YAAY,CAAC,CAAC;IAErD,MAAM,CAAC,IAAI,SAAgB;IAE3B,MAAM,CAAC,QAAQ,qBAA2B;IAE1C,MAAM,CAAC,gBAAgB,WAAmB;IAE1C,iBAAiB;IAIjB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,gBAAgB;IAUnD;;;;;OAKG;IACH,eAAe,CACb,EAAE,EAAE,qBAAqB,EACzB,gBAAgB,EAAE,wBAAwB;IAK5C,cAAc;CAGf"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as t}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{BaseFilter as a}from"./BaseFilter.min.mjs";import{classRegistry as r}from"../ClassRegistry.min.mjs";import{fragmentSource as
|
|
1
|
+
import{defineProperty as t}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{BaseFilter as a}from"./BaseFilter.min.mjs";import{classRegistry as r}from"../ClassRegistry.min.mjs";import{fragmentSource as s}from"./shaders/saturation.min.mjs";const i={saturation:0};class o extends a{getFragmentSource(){return s}applyTo2d(t){let{imageData:{data:a}}=t;const r=-this.saturation;for(let t=0;t<a.length;t+=4){const s=Math.max(a[t],a[t+1],a[t+2]);a[t]+=s!==a[t]?(s-a[t])*r:0,a[t+1]+=s!==a[t+1]?(s-a[t+1])*r:0,a[t+2]+=s!==a[t+2]?(s-a[t+2])*r:0}}sendUniformData(t,a){t.uniform1f(a.uSaturation,-this.saturation)}isNeutralState(){return 0===this.saturation}}t(o,"type","Saturation"),t(o,"defaults",i),t(o,"uniformLocations",["uSaturation"]),r.setClass(o);export{o as Saturation,i as saturationDefaultValues};
|
|
2
2
|
//# sourceMappingURL=Saturation.min.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Saturation.min.mjs","sources":["../../../src/filters/Saturation.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"Saturation.min.mjs","sources":["../../../src/filters/Saturation.ts"],"sourcesContent":["import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/saturation';\n\nexport type SaturationOwnProps = {\n saturation: number;\n};\n\nexport const saturationDefaultValues: SaturationOwnProps = {\n saturation: 0,\n};\n\n/**\n * Saturate filter class\n * @example\n * const filter = new Saturation({\n * saturation: 1\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Saturation extends BaseFilter<'Saturation', SaturationOwnProps> {\n /**\n * Saturation value, from -1 to 1.\n * Increases/decreases the color saturation.\n * A value of 0 has no effect.\n *\n * @param {Number} saturation\n * @default\n */\n declare saturation: SaturationOwnProps['saturation'];\n\n static type = 'Saturation';\n\n static defaults = saturationDefaultValues;\n\n static uniformLocations = ['uSaturation'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Saturation operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const adjust = -this.saturation;\n for (let i = 0; i < data.length; i += 4) {\n const max = Math.max(data[i], data[i + 1], data[i + 2]);\n data[i] += max !== data[i] ? (max - data[i]) * adjust : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * adjust : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * adjust : 0;\n }\n }\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 gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap\n ) {\n gl.uniform1f(uniformLocations.uSaturation, -this.saturation);\n }\n\n isNeutralState() {\n return this.saturation === 0;\n }\n}\n\nclassRegistry.setClass(Saturation);\n"],"names":["saturationDefaultValues","saturation","Saturation","BaseFilter","getFragmentSource","fragmentSource","applyTo2d","_ref","imageData","data","adjust","this","i","length","max","Math","sendUniformData","gl","uniformLocations","uniform1f","uSaturation","isNeutralState","_defineProperty","classRegistry","setClass"],"mappings":"2PASO,MAAMA,EAA8C,CACzDC,WAAY,GAYP,MAAMC,UAAmBC,EAiB9BC,iBAAAA,GACE,OAAOC,CACT,CAQAC,SAAAA,CAASC,GAA4C,IAAzCC,WAAWC,KAAEA,IAA0BF,EACjD,MAAMG,GAAUC,KAAKV,WACrB,IAAK,IAAIW,EAAI,EAAGA,EAAIH,EAAKI,OAAQD,GAAK,EAAG,CACvC,MAAME,EAAMC,KAAKD,IAAIL,EAAKG,GAAIH,EAAKG,EAAI,GAAIH,EAAKG,EAAI,IACpDH,EAAKG,IAAME,IAAQL,EAAKG,IAAME,EAAML,EAAKG,IAAMF,EAAS,EACxDD,EAAKG,EAAI,IAAME,IAAQL,EAAKG,EAAI,IAAME,EAAML,EAAKG,EAAI,IAAMF,EAAS,EACpED,EAAKG,EAAI,IAAME,IAAQL,EAAKG,EAAI,IAAME,EAAML,EAAKG,EAAI,IAAMF,EAAS,CACtE,CACF,CAQAM,eAAAA,CACEC,EACAC,GAEAD,EAAGE,UAAUD,EAAiBE,aAAcT,KAAKV,WACnD,CAEAoB,cAAAA,GACE,OAA2B,IAApBV,KAAKV,UACd,EAnDAqB,EADWpB,EAAU,OAWP,cAAYoB,EAXfpB,EAAU,WAaHF,GAAuBsB,EAb9BpB,EAee,mBAAA,CAAC,gBAwC7BqB,EAAcC,SAAStB"}
|
|
@@ -3,6 +3,10 @@ import { BaseFilter } from './BaseFilter.mjs';
|
|
|
3
3
|
import { classRegistry } from '../ClassRegistry.mjs';
|
|
4
4
|
import { fragmentSource } from './shaders/saturation.mjs';
|
|
5
5
|
|
|
6
|
+
const saturationDefaultValues = {
|
|
7
|
+
saturation: 0
|
|
8
|
+
};
|
|
9
|
+
|
|
6
10
|
/**
|
|
7
11
|
* Saturate filter class
|
|
8
12
|
* @example
|
|
@@ -12,11 +16,6 @@ import { fragmentSource } from './shaders/saturation.mjs';
|
|
|
12
16
|
* object.filters.push(filter);
|
|
13
17
|
* object.applyFilters();
|
|
14
18
|
*/
|
|
15
|
-
|
|
16
|
-
const saturationDefaultValues = {
|
|
17
|
-
saturation: 0,
|
|
18
|
-
mainParameter: 'saturation'
|
|
19
|
-
};
|
|
20
19
|
class Saturation extends BaseFilter {
|
|
21
20
|
getFragmentSource() {
|
|
22
21
|
return fragmentSource;
|
|
@@ -34,9 +33,6 @@ class Saturation extends BaseFilter {
|
|
|
34
33
|
data
|
|
35
34
|
}
|
|
36
35
|
} = _ref;
|
|
37
|
-
if (this.saturation === 0) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
36
|
const adjust = -this.saturation;
|
|
41
37
|
for (let i = 0; i < data.length; i += 4) {
|
|
42
38
|
const max = Math.max(data[i], data[i + 1], data[i + 2]);
|
|
@@ -46,18 +42,6 @@ class Saturation extends BaseFilter {
|
|
|
46
42
|
}
|
|
47
43
|
}
|
|
48
44
|
|
|
49
|
-
/**
|
|
50
|
-
* Return WebGL uniform locations for this filter's shader.
|
|
51
|
-
*
|
|
52
|
-
* @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
|
|
53
|
-
* @param {WebGLShaderProgram} program This filter's compiled shader program.
|
|
54
|
-
*/
|
|
55
|
-
getUniformLocations(gl, program) {
|
|
56
|
-
return {
|
|
57
|
-
uSaturation: gl.getUniformLocation(program, 'uSaturation')
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
|
|
61
45
|
/**
|
|
62
46
|
* Send data from this filter to its shader program's uniforms.
|
|
63
47
|
*
|
|
@@ -67,6 +51,9 @@ class Saturation extends BaseFilter {
|
|
|
67
51
|
sendUniformData(gl, uniformLocations) {
|
|
68
52
|
gl.uniform1f(uniformLocations.uSaturation, -this.saturation);
|
|
69
53
|
}
|
|
54
|
+
isNeutralState() {
|
|
55
|
+
return this.saturation === 0;
|
|
56
|
+
}
|
|
70
57
|
}
|
|
71
58
|
/**
|
|
72
59
|
* Saturation value, from -1 to 1.
|
|
@@ -78,6 +65,7 @@ class Saturation extends BaseFilter {
|
|
|
78
65
|
*/
|
|
79
66
|
_defineProperty(Saturation, "type", 'Saturation');
|
|
80
67
|
_defineProperty(Saturation, "defaults", saturationDefaultValues);
|
|
68
|
+
_defineProperty(Saturation, "uniformLocations", ['uSaturation']);
|
|
81
69
|
classRegistry.setClass(Saturation);
|
|
82
70
|
|
|
83
71
|
export { Saturation, saturationDefaultValues };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Saturation.mjs","sources":["../../../src/filters/Saturation.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"Saturation.mjs","sources":["../../../src/filters/Saturation.ts"],"sourcesContent":["import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/saturation';\n\nexport type SaturationOwnProps = {\n saturation: number;\n};\n\nexport const saturationDefaultValues: SaturationOwnProps = {\n saturation: 0,\n};\n\n/**\n * Saturate filter class\n * @example\n * const filter = new Saturation({\n * saturation: 1\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Saturation extends BaseFilter<'Saturation', SaturationOwnProps> {\n /**\n * Saturation value, from -1 to 1.\n * Increases/decreases the color saturation.\n * A value of 0 has no effect.\n *\n * @param {Number} saturation\n * @default\n */\n declare saturation: SaturationOwnProps['saturation'];\n\n static type = 'Saturation';\n\n static defaults = saturationDefaultValues;\n\n static uniformLocations = ['uSaturation'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Saturation operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const adjust = -this.saturation;\n for (let i = 0; i < data.length; i += 4) {\n const max = Math.max(data[i], data[i + 1], data[i + 2]);\n data[i] += max !== data[i] ? (max - data[i]) * adjust : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * adjust : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * adjust : 0;\n }\n }\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 gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap\n ) {\n gl.uniform1f(uniformLocations.uSaturation, -this.saturation);\n }\n\n isNeutralState() {\n return this.saturation === 0;\n }\n}\n\nclassRegistry.setClass(Saturation);\n"],"names":["saturationDefaultValues","saturation","Saturation","BaseFilter","getFragmentSource","fragmentSource","applyTo2d","_ref","imageData","data","adjust","i","length","max","Math","sendUniformData","gl","uniformLocations","uniform1f","uSaturation","isNeutralState","_defineProperty","classRegistry","setClass"],"mappings":";;;;;AASO,MAAMA,uBAA2C,GAAG;AACzDC,EAAAA,UAAU,EAAE,CAAA;AACd,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,UAAU,SAASC,UAAU,CAAmC;AAiB3EC,EAAAA,iBAAiBA,GAAG;AAClB,IAAA,OAAOC,cAAc,CAAA;AACvB,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACEC,SAASA,CAAAC,IAAA,EAA4C;IAAA,IAA3C;AAAEC,MAAAA,SAAS,EAAE;AAAEC,QAAAA,IAAAA;AAAK,OAAA;AAAoB,KAAC,GAAAF,IAAA,CAAA;AACjD,IAAA,MAAMG,MAAM,GAAG,CAAC,IAAI,CAACT,UAAU,CAAA;AAC/B,IAAA,KAAK,IAAIU,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,IAAI,CAACG,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;MACvC,MAAME,GAAG,GAAGC,IAAI,CAACD,GAAG,CAACJ,IAAI,CAACE,CAAC,CAAC,EAAEF,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,EAAEF,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;MACvDF,IAAI,CAACE,CAAC,CAAC,IAAIE,GAAG,KAAKJ,IAAI,CAACE,CAAC,CAAC,GAAG,CAACE,GAAG,GAAGJ,IAAI,CAACE,CAAC,CAAC,IAAID,MAAM,GAAG,CAAC,CAAA;MACzDD,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,IAAIE,GAAG,KAAKJ,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,GAAG,CAACE,GAAG,GAAGJ,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,IAAID,MAAM,GAAG,CAAC,CAAA;MACrED,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,IAAIE,GAAG,KAAKJ,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,GAAG,CAACE,GAAG,GAAGJ,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,IAAID,MAAM,GAAG,CAAC,CAAA;AACvE,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEK,EAAAA,eAAeA,CACbC,EAAyB,EACzBC,gBAA0C,EAC1C;IACAD,EAAE,CAACE,SAAS,CAACD,gBAAgB,CAACE,WAAW,EAAE,CAAC,IAAI,CAAClB,UAAU,CAAC,CAAA;AAC9D,GAAA;AAEAmB,EAAAA,cAAcA,GAAG;AACf,IAAA,OAAO,IAAI,CAACnB,UAAU,KAAK,CAAC,CAAA;AAC9B,GAAA;AACF,CAAA;AApDE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AAPEoB,eAAA,CADWnB,UAAU,EAAA,MAAA,EAWP,YAAY,CAAA,CAAA;AAAAmB,eAAA,CAXfnB,UAAU,EAAA,UAAA,EAaHF,uBAAuB,CAAA,CAAA;AAAAqB,eAAA,CAb9BnB,UAAU,EAeK,kBAAA,EAAA,CAAC,aAAa,CAAC,CAAA,CAAA;AAwC3CoB,aAAa,CAACC,QAAQ,CAACrB,UAAU,CAAC;;;;"}
|
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
import type { TClassProperties } from '../typedefs';
|
|
2
1
|
import { BaseFilter } from './BaseFilter';
|
|
3
2
|
import type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';
|
|
4
|
-
export
|
|
3
|
+
export type VibranceOwnProps = {
|
|
4
|
+
vibrance: number;
|
|
5
|
+
};
|
|
6
|
+
export declare const vibranceDefaultValues: VibranceOwnProps;
|
|
5
7
|
/**
|
|
6
8
|
* Vibrance filter class
|
|
7
9
|
* @example
|
|
@@ -11,7 +13,7 @@ export declare const vibranceDefaultValues: Partial<TClassProperties<Vibrance>>;
|
|
|
11
13
|
* object.filters.push(filter);
|
|
12
14
|
* object.applyFilters();
|
|
13
15
|
*/
|
|
14
|
-
export declare class Vibrance extends BaseFilter {
|
|
16
|
+
export declare class Vibrance extends BaseFilter<'Vibrance', VibranceOwnProps> {
|
|
15
17
|
/**
|
|
16
18
|
* Vibrance value, from -1 to 1.
|
|
17
19
|
* Increases/decreases the saturation of more muted colors with less effect on saturated colors.
|
|
@@ -20,9 +22,10 @@ export declare class Vibrance extends BaseFilter {
|
|
|
20
22
|
* @param {Number} vibrance
|
|
21
23
|
* @default
|
|
22
24
|
*/
|
|
23
|
-
vibrance:
|
|
25
|
+
vibrance: VibranceOwnProps['vibrance'];
|
|
24
26
|
static type: string;
|
|
25
|
-
static defaults:
|
|
27
|
+
static defaults: VibranceOwnProps;
|
|
28
|
+
static uniformLocations: string[];
|
|
26
29
|
getFragmentSource(): string;
|
|
27
30
|
/**
|
|
28
31
|
* Apply the Vibrance operation to a Uint8ClampedArray representing the pixels of an image.
|
|
@@ -31,19 +34,13 @@ export declare class Vibrance extends BaseFilter {
|
|
|
31
34
|
* @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.
|
|
32
35
|
*/
|
|
33
36
|
applyTo2d({ imageData: { data } }: T2DPipelineState): void;
|
|
34
|
-
/**
|
|
35
|
-
* Return WebGL uniform locations for this filter's shader.
|
|
36
|
-
*
|
|
37
|
-
* @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
|
|
38
|
-
* @param {WebGLShaderProgram} program This filter's compiled shader program.
|
|
39
|
-
*/
|
|
40
|
-
getUniformLocations(gl: WebGLRenderingContext, program: WebGLProgram): TWebGLUniformLocationMap;
|
|
41
37
|
/**
|
|
42
38
|
* Send data from this filter to its shader program's uniforms.
|
|
43
39
|
*
|
|
44
40
|
* @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
|
|
45
|
-
* @param {
|
|
41
|
+
* @param {TWebGLUniformLocationMap} uniformLocations A map of string uniform names to WebGLUniformLocation objects
|
|
46
42
|
*/
|
|
47
43
|
sendUniformData(gl: WebGLRenderingContext, uniformLocations: TWebGLUniformLocationMap): void;
|
|
44
|
+
isNeutralState(): boolean;
|
|
48
45
|
}
|
|
49
46
|
//# sourceMappingURL=Vibrance.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Vibrance.d.ts","sourceRoot":"","sources":["../../../src/filters/Vibrance.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"Vibrance.d.ts","sourceRoot":"","sources":["../../../src/filters/Vibrance.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,KAAK,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,YAAY,CAAC;AAI7E,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,gBAEnC,CAAC;AAEF;;;;;;;;GAQG;AACH,qBAAa,QAAS,SAAQ,UAAU,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACpE;;;;;;;OAOG;IACK,QAAQ,EAAE,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAE/C,MAAM,CAAC,IAAI,SAAc;IAEzB,MAAM,CAAC,QAAQ,mBAAyB;IAExC,MAAM,CAAC,gBAAgB,WAAiB;IAExC,iBAAiB;IAIjB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,gBAAgB;IAYnD;;;;;OAKG;IACH,eAAe,CACb,EAAE,EAAE,qBAAqB,EACzB,gBAAgB,EAAE,wBAAwB;IAK5C,cAAc;CAGf"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{defineProperty as
|
|
1
|
+
import{defineProperty as e}from"../../_virtual/_rollupPluginBabelHelpers.min.mjs";import{BaseFilter as r}from"./BaseFilter.min.mjs";import{classRegistry as t}from"../ClassRegistry.min.mjs";import{fragmentSource as a}from"./shaders/vibrance.min.mjs";const i={vibrance:0};class s extends r{getFragmentSource(){return a}applyTo2d(e){let{imageData:{data:r}}=e;const t=-this.vibrance;for(let e=0;e<r.length;e+=4){const a=Math.max(r[e],r[e+1],r[e+2]),i=(r[e]+r[e+1]+r[e+2])/3,s=2*Math.abs(a-i)/255*t;r[e]+=a!==r[e]?(a-r[e])*s:0,r[e+1]+=a!==r[e+1]?(a-r[e+1])*s:0,r[e+2]+=a!==r[e+2]?(a-r[e+2])*s:0}}sendUniformData(e,r){e.uniform1f(r.uVibrance,-this.vibrance)}isNeutralState(){return 0===this.vibrance}}e(s,"type","Vibrance"),e(s,"defaults",i),e(s,"uniformLocations",["uVibrance"]),t.setClass(s);export{s as Vibrance,i as vibranceDefaultValues};
|
|
2
2
|
//# sourceMappingURL=Vibrance.min.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Vibrance.min.mjs","sources":["../../../src/filters/Vibrance.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"Vibrance.min.mjs","sources":["../../../src/filters/Vibrance.ts"],"sourcesContent":["import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/vibrance';\n\nexport type VibranceOwnProps = {\n vibrance: number;\n};\n\nexport const vibranceDefaultValues: VibranceOwnProps = {\n vibrance: 0,\n};\n\n/**\n * Vibrance filter class\n * @example\n * const filter = new Vibrance({\n * vibrance: 1\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Vibrance extends BaseFilter<'Vibrance', VibranceOwnProps> {\n /**\n * Vibrance value, from -1 to 1.\n * Increases/decreases the saturation of more muted colors with less effect on saturated colors.\n * A value of 0 has no effect.\n *\n * @param {Number} vibrance\n * @default\n */\n declare vibrance: VibranceOwnProps['vibrance'];\n\n static type = 'Vibrance';\n\n static defaults = vibranceDefaultValues;\n\n static uniformLocations = ['uVibrance'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Vibrance operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const adjust = -this.vibrance;\n for (let i = 0; i < data.length; i += 4) {\n const max = Math.max(data[i], data[i + 1], data[i + 2]);\n const avg = (data[i] + data[i + 1] + data[i + 2]) / 3;\n const amt = ((Math.abs(max - avg) * 2) / 255) * adjust;\n data[i] += max !== data[i] ? (max - data[i]) * amt : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * amt : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * amt : 0;\n }\n }\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 {TWebGLUniformLocationMap} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap\n ) {\n gl.uniform1f(uniformLocations.uVibrance, -this.vibrance);\n }\n\n isNeutralState() {\n return this.vibrance === 0;\n }\n}\n\nclassRegistry.setClass(Vibrance);\n"],"names":["vibranceDefaultValues","vibrance","Vibrance","BaseFilter","getFragmentSource","fragmentSource","applyTo2d","_ref","imageData","data","adjust","this","i","length","max","Math","avg","amt","abs","sendUniformData","gl","uniformLocations","uniform1f","uVibrance","isNeutralState","_defineProperty","classRegistry","setClass"],"mappings":"yPASO,MAAMA,EAA0C,CACrDC,SAAU,GAYL,MAAMC,UAAiBC,EAiB5BC,iBAAAA,GACE,OAAOC,CACT,CAQAC,SAAAA,CAASC,GAA4C,IAAzCC,WAAWC,KAAEA,IAA0BF,EACjD,MAAMG,GAAUC,KAAKV,SACrB,IAAK,IAAIW,EAAI,EAAGA,EAAIH,EAAKI,OAAQD,GAAK,EAAG,CACvC,MAAME,EAAMC,KAAKD,IAAIL,EAAKG,GAAIH,EAAKG,EAAI,GAAIH,EAAKG,EAAI,IAC9CI,GAAOP,EAAKG,GAAKH,EAAKG,EAAI,GAAKH,EAAKG,EAAI,IAAM,EAC9CK,EAA8B,EAAtBF,KAAKG,IAAIJ,EAAME,GAAY,IAAON,EAChDD,EAAKG,IAAME,IAAQL,EAAKG,IAAME,EAAML,EAAKG,IAAMK,EAAM,EACrDR,EAAKG,EAAI,IAAME,IAAQL,EAAKG,EAAI,IAAME,EAAML,EAAKG,EAAI,IAAMK,EAAM,EACjER,EAAKG,EAAI,IAAME,IAAQL,EAAKG,EAAI,IAAME,EAAML,EAAKG,EAAI,IAAMK,EAAM,CACnE,CACF,CAQAE,eAAAA,CACEC,EACAC,GAEAD,EAAGE,UAAUD,EAAiBE,WAAYZ,KAAKV,SACjD,CAEAuB,cAAAA,GACE,OAAyB,IAAlBb,KAAKV,QACd,EArDAwB,EADWvB,EAAQ,OAWL,YAAUuB,EAXbvB,EAAQ,WAaDF,GAAqByB,EAb5BvB,EAee,mBAAA,CAAC,cA0C7BwB,EAAcC,SAASzB"}
|
|
@@ -4,8 +4,7 @@ import { classRegistry } from '../ClassRegistry.mjs';
|
|
|
4
4
|
import { fragmentSource } from './shaders/vibrance.mjs';
|
|
5
5
|
|
|
6
6
|
const vibranceDefaultValues = {
|
|
7
|
-
vibrance: 0
|
|
8
|
-
mainParameter: 'vibrance'
|
|
7
|
+
vibrance: 0
|
|
9
8
|
};
|
|
10
9
|
|
|
11
10
|
/**
|
|
@@ -34,9 +33,6 @@ class Vibrance extends BaseFilter {
|
|
|
34
33
|
data
|
|
35
34
|
}
|
|
36
35
|
} = _ref;
|
|
37
|
-
if (this.vibrance === 0) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
36
|
const adjust = -this.vibrance;
|
|
41
37
|
for (let i = 0; i < data.length; i += 4) {
|
|
42
38
|
const max = Math.max(data[i], data[i + 1], data[i + 2]);
|
|
@@ -48,27 +44,18 @@ class Vibrance extends BaseFilter {
|
|
|
48
44
|
}
|
|
49
45
|
}
|
|
50
46
|
|
|
51
|
-
/**
|
|
52
|
-
* Return WebGL uniform locations for this filter's shader.
|
|
53
|
-
*
|
|
54
|
-
* @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
|
|
55
|
-
* @param {WebGLShaderProgram} program This filter's compiled shader program.
|
|
56
|
-
*/
|
|
57
|
-
getUniformLocations(gl, program) {
|
|
58
|
-
return {
|
|
59
|
-
uVibrance: gl.getUniformLocation(program, 'uVibrance')
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
|
|
63
47
|
/**
|
|
64
48
|
* Send data from this filter to its shader program's uniforms.
|
|
65
49
|
*
|
|
66
50
|
* @param {WebGLRenderingContext} gl The GL canvas context used to compile this filter's shader.
|
|
67
|
-
* @param {
|
|
51
|
+
* @param {TWebGLUniformLocationMap} uniformLocations A map of string uniform names to WebGLUniformLocation objects
|
|
68
52
|
*/
|
|
69
53
|
sendUniformData(gl, uniformLocations) {
|
|
70
54
|
gl.uniform1f(uniformLocations.uVibrance, -this.vibrance);
|
|
71
55
|
}
|
|
56
|
+
isNeutralState() {
|
|
57
|
+
return this.vibrance === 0;
|
|
58
|
+
}
|
|
72
59
|
}
|
|
73
60
|
/**
|
|
74
61
|
* Vibrance value, from -1 to 1.
|
|
@@ -80,6 +67,7 @@ class Vibrance extends BaseFilter {
|
|
|
80
67
|
*/
|
|
81
68
|
_defineProperty(Vibrance, "type", 'Vibrance');
|
|
82
69
|
_defineProperty(Vibrance, "defaults", vibranceDefaultValues);
|
|
70
|
+
_defineProperty(Vibrance, "uniformLocations", ['uVibrance']);
|
|
83
71
|
classRegistry.setClass(Vibrance);
|
|
84
72
|
|
|
85
73
|
export { Vibrance, vibranceDefaultValues };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Vibrance.mjs","sources":["../../../src/filters/Vibrance.ts"],"sourcesContent":["import
|
|
1
|
+
{"version":3,"file":"Vibrance.mjs","sources":["../../../src/filters/Vibrance.ts"],"sourcesContent":["import { BaseFilter } from './BaseFilter';\nimport type { T2DPipelineState, TWebGLUniformLocationMap } from './typedefs';\nimport { classRegistry } from '../ClassRegistry';\nimport { fragmentSource } from './shaders/vibrance';\n\nexport type VibranceOwnProps = {\n vibrance: number;\n};\n\nexport const vibranceDefaultValues: VibranceOwnProps = {\n vibrance: 0,\n};\n\n/**\n * Vibrance filter class\n * @example\n * const filter = new Vibrance({\n * vibrance: 1\n * });\n * object.filters.push(filter);\n * object.applyFilters();\n */\nexport class Vibrance extends BaseFilter<'Vibrance', VibranceOwnProps> {\n /**\n * Vibrance value, from -1 to 1.\n * Increases/decreases the saturation of more muted colors with less effect on saturated colors.\n * A value of 0 has no effect.\n *\n * @param {Number} vibrance\n * @default\n */\n declare vibrance: VibranceOwnProps['vibrance'];\n\n static type = 'Vibrance';\n\n static defaults = vibranceDefaultValues;\n\n static uniformLocations = ['uVibrance'];\n\n getFragmentSource() {\n return fragmentSource;\n }\n\n /**\n * Apply the Vibrance operation to a Uint8ClampedArray representing the pixels of an image.\n *\n * @param {Object} options\n * @param {ImageData} options.imageData The Uint8ClampedArray to be filtered.\n */\n applyTo2d({ imageData: { data } }: T2DPipelineState) {\n const adjust = -this.vibrance;\n for (let i = 0; i < data.length; i += 4) {\n const max = Math.max(data[i], data[i + 1], data[i + 2]);\n const avg = (data[i] + data[i + 1] + data[i + 2]) / 3;\n const amt = ((Math.abs(max - avg) * 2) / 255) * adjust;\n data[i] += max !== data[i] ? (max - data[i]) * amt : 0;\n data[i + 1] += max !== data[i + 1] ? (max - data[i + 1]) * amt : 0;\n data[i + 2] += max !== data[i + 2] ? (max - data[i + 2]) * amt : 0;\n }\n }\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 {TWebGLUniformLocationMap} uniformLocations A map of string uniform names to WebGLUniformLocation objects\n */\n sendUniformData(\n gl: WebGLRenderingContext,\n uniformLocations: TWebGLUniformLocationMap\n ) {\n gl.uniform1f(uniformLocations.uVibrance, -this.vibrance);\n }\n\n isNeutralState() {\n return this.vibrance === 0;\n }\n}\n\nclassRegistry.setClass(Vibrance);\n"],"names":["vibranceDefaultValues","vibrance","Vibrance","BaseFilter","getFragmentSource","fragmentSource","applyTo2d","_ref","imageData","data","adjust","i","length","max","Math","avg","amt","abs","sendUniformData","gl","uniformLocations","uniform1f","uVibrance","isNeutralState","_defineProperty","classRegistry","setClass"],"mappings":";;;;;AASO,MAAMA,qBAAuC,GAAG;AACrDC,EAAAA,QAAQ,EAAE,CAAA;AACZ,EAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACO,MAAMC,QAAQ,SAASC,UAAU,CAA+B;AAiBrEC,EAAAA,iBAAiBA,GAAG;AAClB,IAAA,OAAOC,cAAc,CAAA;AACvB,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;EACEC,SAASA,CAAAC,IAAA,EAA4C;IAAA,IAA3C;AAAEC,MAAAA,SAAS,EAAE;AAAEC,QAAAA,IAAAA;AAAK,OAAA;AAAoB,KAAC,GAAAF,IAAA,CAAA;AACjD,IAAA,MAAMG,MAAM,GAAG,CAAC,IAAI,CAACT,QAAQ,CAAA;AAC7B,IAAA,KAAK,IAAIU,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGF,IAAI,CAACG,MAAM,EAAED,CAAC,IAAI,CAAC,EAAE;MACvC,MAAME,GAAG,GAAGC,IAAI,CAACD,GAAG,CAACJ,IAAI,CAACE,CAAC,CAAC,EAAEF,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,EAAEF,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAA;MACvD,MAAMI,GAAG,GAAG,CAACN,IAAI,CAACE,CAAC,CAAC,GAAGF,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,GAAGF,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAA;AACrD,MAAA,MAAMK,GAAG,GAAKF,IAAI,CAACG,GAAG,CAACJ,GAAG,GAAGE,GAAG,CAAC,GAAG,CAAC,GAAI,GAAG,GAAIL,MAAM,CAAA;MACtDD,IAAI,CAACE,CAAC,CAAC,IAAIE,GAAG,KAAKJ,IAAI,CAACE,CAAC,CAAC,GAAG,CAACE,GAAG,GAAGJ,IAAI,CAACE,CAAC,CAAC,IAAIK,GAAG,GAAG,CAAC,CAAA;MACtDP,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,IAAIE,GAAG,KAAKJ,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,GAAG,CAACE,GAAG,GAAGJ,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,IAAIK,GAAG,GAAG,CAAC,CAAA;MAClEP,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,IAAIE,GAAG,KAAKJ,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,GAAG,CAACE,GAAG,GAAGJ,IAAI,CAACE,CAAC,GAAG,CAAC,CAAC,IAAIK,GAAG,GAAG,CAAC,CAAA;AACpE,KAAA;AACF,GAAA;;AAEA;AACF;AACA;AACA;AACA;AACA;AACEE,EAAAA,eAAeA,CACbC,EAAyB,EACzBC,gBAA0C,EAC1C;IACAD,EAAE,CAACE,SAAS,CAACD,gBAAgB,CAACE,SAAS,EAAE,CAAC,IAAI,CAACrB,QAAQ,CAAC,CAAA;AAC1D,GAAA;AAEAsB,EAAAA,cAAcA,GAAG;AACf,IAAA,OAAO,IAAI,CAACtB,QAAQ,KAAK,CAAC,CAAA;AAC5B,GAAA;AACF,CAAA;AAtDE;AACF;AACA;AACA;AACA;AACA;AACA;AACA;AAPEuB,eAAA,CADWtB,QAAQ,EAAA,MAAA,EAWL,UAAU,CAAA,CAAA;AAAAsB,eAAA,CAXbtB,QAAQ,EAAA,UAAA,EAaDF,qBAAqB,CAAA,CAAA;AAAAwB,eAAA,CAb5BtB,QAAQ,EAeO,kBAAA,EAAA,CAAC,WAAW,CAAC,CAAA,CAAA;AA0CzCuB,aAAa,CAACC,QAAQ,CAACxB,QAAQ,CAAC;;;;"}
|
|
@@ -60,7 +60,7 @@ export declare class WebGLFilterBackend {
|
|
|
60
60
|
* @param {String|undefined} cacheKey A key used to cache resources related to the source. If
|
|
61
61
|
* omitted, caching will be skipped.
|
|
62
62
|
*/
|
|
63
|
-
applyFilters(filters: BaseFilter[], source: TexImageSource, width: number, height: number, targetCanvas: HTMLCanvasElement, cacheKey?: string): TWebGLPipelineState | undefined;
|
|
63
|
+
applyFilters(filters: BaseFilter<string, Record<string, any>>[], source: TexImageSource, width: number, height: number, targetCanvas: HTMLCanvasElement, cacheKey?: string): TWebGLPipelineState | undefined;
|
|
64
64
|
/**
|
|
65
65
|
* Detach event listeners, remove references, and clean up caches.
|
|
66
66
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WebGLFilterBackend.d.ts","sourceRoot":"","sources":["../../../src/filters/WebGLFilterBackend.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,kBAAkB,EACnB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,qBAAa,kBAAkB;IACrB,QAAQ,EAAE,MAAM,CAAC;IAEzB;;QAEI;IACJ,SAAS,EAAE,YAAY,CAA8C;IAErE;;;QAGI;IACI,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B,MAAM,EAAE,iBAAiB,CAAC;IAElC;;QAEI;IACI,EAAE,EAAE,qBAAqB,CAAC;IAElC;;QAEI;IACI,YAAY,EAAE,aAAa,CAAC;IAEpC;;QAEI;IACI,YAAY,EAAE,aAAa,CAAC;IAEpC;;QAEI;IACI,OAAO,EAAE,GAAG,CAAC;IAErB;;;;;;QAMI;IACJ,SAAS,EAAE,kBAAkB,CAAM;gBAEvB,EAAE,QAA6B,EAAE;;KAAK;IAMlD;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAKnD;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAsBtD;;;;;;;;;;;OAWG;IACH,YAAY,CACV,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"WebGLFilterBackend.d.ts","sourceRoot":"","sources":["../../../src/filters/WebGLFilterBackend.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,mBAAmB,EACnB,aAAa,EACb,aAAa,EACb,kBAAkB,EACnB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE/C,qBAAa,kBAAkB;IACrB,QAAQ,EAAE,MAAM,CAAC;IAEzB;;QAEI;IACJ,SAAS,EAAE,YAAY,CAA8C;IAErE;;;QAGI;IACI,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B,MAAM,EAAE,iBAAiB,CAAC;IAElC;;QAEI;IACI,EAAE,EAAE,qBAAqB,CAAC;IAElC;;QAEI;IACI,YAAY,EAAE,aAAa,CAAC;IAEpC;;QAEI;IACI,YAAY,EAAE,aAAa,CAAC;IAEpC;;QAEI;IACI,OAAO,EAAE,GAAG,CAAC;IAErB;;;;;;QAMI;IACJ,SAAS,EAAE,kBAAkB,CAAM;gBAEvB,EAAE,QAA6B,EAAE;;KAAK;IAMlD;;OAEG;IACH,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAKnD;;;OAGG;IACH,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAsBtD;;;;;;;;;;;OAWG;IACH,YAAY,CACV,OAAO,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,EAClD,MAAM,EAAE,cAAc,EACtB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,iBAAiB,EAC/B,QAAQ,CAAC,EAAE,MAAM,GAChB,mBAAmB,GAAG,SAAS;IAgElC;;OAEG;IACH,OAAO;IAYP;;OAEG;IACH,gBAAgB;IAKhB;;;;;;;;;;;;OAYG;IACH,aAAa,CACX,EAAE,EAAE,qBAAqB,EACzB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,kBAAkB,CAAC,EAAE,cAAc,EACnC,MAAM,CAAC,EACH,yBAAyB,CAAC,SAAS,CAAC,GACpC,yBAAyB,CAAC,QAAQ,CAAC;IA4CzC;;;;;;;;OAQG;IACH,gBAAgB,CACd,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,cAAc,EAClC,MAAM,CAAC,EACH,yBAAyB,CAAC,SAAS,CAAC,GACpC,yBAAyB,CAAC,QAAQ,CAAC,GACtC,YAAY,GAAG,IAAI;IAmBtB;;;;;OAKG;IACH,iBAAiB,CAAC,QAAQ,EAAE,MAAM;IAOlC;;;;;;;;OAQG;IACH,UAAU,CAAC,EAAE,EAAE,qBAAqB,EAAE,aAAa,EAAE,mBAAmB;IAwBxE;;;;;;;OAOG;IACH,sBAAsB,CACpB,IAAI,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAClC,EAAE,EAAE,qBAAqB,EACzB,aAAa,EAAE,mBAAmB;IAkBpC;;;;;;OAMG;IACH,cAAc;CAuBf"}
|