ace-colorpicker-rpk 0.0.12
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/.babelrc +30 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +35 -0
- package/.github/ISSUE_TEMPLATE/feature_request.md +17 -0
- package/ChangeLogs.md +22 -0
- package/LICENSE +21 -0
- package/README.md +117 -0
- package/addon/ace-colorpicker.css +1074 -0
- package/addon/ace-colorpicker.js +9602 -0
- package/addon/sample/colorpicker.html +199 -0
- package/config/rollup.config.dev.js +52 -0
- package/config/rollup.config.prod.js +53 -0
- package/dist/ace-colorpicker.css +1074 -0
- package/dist/ace-colorpicker.js +9736 -0
- package/dist/ace-colorpicker.min.js +1 -0
- package/gl.html +56 -0
- package/index.html +172 -0
- package/package.json +87 -0
- package/resources/image/ace-editor.png +0 -0
- package/resources/image/colorpaletts.png +0 -0
- package/resources/image/colorpicker.png +0 -0
- package/resources/image/grapes.jpg +0 -0
- package/resources/image/palette-type.png +0 -0
- package/resources/image/scalecolors-title.png +0 -0
- package/resources/image/scalecolors.png +0 -0
- package/resources/image/screen-shot.png +0 -0
- package/resources/image/sketch-type.png +0 -0
- package/src/colorpicker/BaseBox.js +94 -0
- package/src/colorpicker/BaseColorPicker.js +404 -0
- package/src/colorpicker/BaseModule.js +19 -0
- package/src/colorpicker/BaseSlider.js +97 -0
- package/src/colorpicker/BaseStore.js +71 -0
- package/src/colorpicker/UIElement.js +46 -0
- package/src/colorpicker/VerticalSlider.js +57 -0
- package/src/colorpicker/chromedevtool/ColorControl.js +47 -0
- package/src/colorpicker/chromedevtool/index.js +36 -0
- package/src/colorpicker/index.js +37 -0
- package/src/colorpicker/macos/ColorControl.js +47 -0
- package/src/colorpicker/macos/index.js +38 -0
- package/src/colorpicker/mini/ColorControl.js +40 -0
- package/src/colorpicker/mini/index.js +24 -0
- package/src/colorpicker/mini-vertical/ColorControl.js +35 -0
- package/src/colorpicker/mini-vertical/index.js +23 -0
- package/src/colorpicker/module/ColorManager.js +111 -0
- package/src/colorpicker/module/ColorSetsList.js +132 -0
- package/src/colorpicker/ring/ColorControl.js +47 -0
- package/src/colorpicker/ring/index.js +42 -0
- package/src/colorpicker/ui/ColorInformation.js +216 -0
- package/src/colorpicker/ui/ColorPalette.js +130 -0
- package/src/colorpicker/ui/ColorRing.js +68 -0
- package/src/colorpicker/ui/ColorSetsChooser.js +96 -0
- package/src/colorpicker/ui/ColorWheel.js +257 -0
- package/src/colorpicker/ui/CurrentColorSets.js +81 -0
- package/src/colorpicker/ui/CurrentColorSetsContextMenu.js +63 -0
- package/src/colorpicker/ui/control/Hue.js +40 -0
- package/src/colorpicker/ui/control/Opacity.js +65 -0
- package/src/colorpicker/ui/control/Value.js +50 -0
- package/src/colorpicker/ui/control/VerticalHue.js +39 -0
- package/src/colorpicker/ui/control/VerticalOpacity.js +55 -0
- package/src/colorpicker/vscode/ColorControl.js +40 -0
- package/src/colorpicker/vscode/index.js +82 -0
- package/src/colorpicker/xd/ColorControl.js +36 -0
- package/src/colorpicker/xd/index.js +36 -0
- package/src/extension/ace/colorview.js +198 -0
- package/src/extension/ace/index.js +11 -0
- package/src/index.js +12 -0
- package/src/scss/colorpicker.scss +65 -0
- package/src/scss/colorview.scss +32 -0
- package/src/scss/component/button.scss +33 -0
- package/src/scss/component/colorchooser.scss +141 -0
- package/src/scss/component/colorsets-contextmenu.scss +33 -0
- package/src/scss/component/colorsets.scss +89 -0
- package/src/scss/component/control.scss +93 -0
- package/src/scss/component/gradient-editor.scss +260 -0
- package/src/scss/component/gradient-picker.scss +241 -0
- package/src/scss/component/information.scss +141 -0
- package/src/scss/component/palette.scss +45 -0
- package/src/scss/index.scss +5 -0
- package/src/scss/mixins.scss +21 -0
- package/src/scss/themes/macos.scss +71 -0
- package/src/scss/themes/mini-vertical.scss +94 -0
- package/src/scss/themes/mini.scss +76 -0
- package/src/scss/themes/palette.scss +85 -0
- package/src/scss/themes/ring.scss +57 -0
- package/src/scss/themes/sketch.scss +172 -0
- package/src/scss/themes/vscode.scss +93 -0
- package/src/scss/themes/xd.scss +88 -0
- package/src/util/Blender.js +29 -0
- package/src/util/Canvas.js +128 -0
- package/src/util/Color.js +27 -0
- package/src/util/ColorNames.js +14 -0
- package/src/util/Dom.js +361 -0
- package/src/util/Event.js +30 -0
- package/src/util/EventMachin.js +349 -0
- package/src/util/GL.js +8 -0
- package/src/util/HueColor.js +49 -0
- package/src/util/ImageFilter.js +9 -0
- package/src/util/ImageLoader.js +137 -0
- package/src/util/Kmeans.js +237 -0
- package/src/util/Matrix.js +196 -0
- package/src/util/State.js +42 -0
- package/src/util/blend/composite.js +124 -0
- package/src/util/blend/non-separable.js +118 -0
- package/src/util/blend/separable.js +76 -0
- package/src/util/filter/StackBlur.js +517 -0
- package/src/util/filter/functions.js +829 -0
- package/src/util/filter/image/crop.js +16 -0
- package/src/util/filter/image/flipH.js +23 -0
- package/src/util/filter/image/flipV.js +25 -0
- package/src/util/filter/image/histogram.js +45 -0
- package/src/util/filter/image/index.js +18 -0
- package/src/util/filter/image/resize.js +18 -0
- package/src/util/filter/image/rotate.js +39 -0
- package/src/util/filter/image/rotateDegree.js +53 -0
- package/src/util/filter/index.js +11 -0
- package/src/util/filter/matrix/blur.js +12 -0
- package/src/util/filter/matrix/emboss.js +17 -0
- package/src/util/filter/matrix/gaussian-blur-5x.js +17 -0
- package/src/util/filter/matrix/gaussian-blur.js +16 -0
- package/src/util/filter/matrix/grayscale2.js +16 -0
- package/src/util/filter/matrix/index.js +58 -0
- package/src/util/filter/matrix/kirsch-horizontal.js +13 -0
- package/src/util/filter/matrix/kirsch-vertical.js +13 -0
- package/src/util/filter/matrix/laplacian-5x.js +16 -0
- package/src/util/filter/matrix/laplacian.js +14 -0
- package/src/util/filter/matrix/motion-blur-2.js +18 -0
- package/src/util/filter/matrix/motion-blur-3.js +19 -0
- package/src/util/filter/matrix/motion-blur.js +18 -0
- package/src/util/filter/matrix/negative.js +16 -0
- package/src/util/filter/matrix/normal.js +11 -0
- package/src/util/filter/matrix/sepia2.js +16 -0
- package/src/util/filter/matrix/sharpen.js +14 -0
- package/src/util/filter/matrix/sobel-horizontal.js +11 -0
- package/src/util/filter/matrix/sobel-vertical.js +11 -0
- package/src/util/filter/matrix/stack-blur.js +15 -0
- package/src/util/filter/matrix/transparency.js +16 -0
- package/src/util/filter/matrix/unsharp-masking.js +16 -0
- package/src/util/filter/multi/index.js +9 -0
- package/src/util/filter/multi/kirsch.js +7 -0
- package/src/util/filter/multi/sobel.js +7 -0
- package/src/util/filter/multi/vintage.js +7 -0
- package/src/util/filter/pixel/bitonal.js +24 -0
- package/src/util/filter/pixel/brightness.js +19 -0
- package/src/util/filter/pixel/brownie.js +23 -0
- package/src/util/filter/pixel/clip.js +21 -0
- package/src/util/filter/pixel/contrast.js +18 -0
- package/src/util/filter/pixel/gamma.js +13 -0
- package/src/util/filter/pixel/gradient.js +52 -0
- package/src/util/filter/pixel/grayscale.js +27 -0
- package/src/util/filter/pixel/hue.js +28 -0
- package/src/util/filter/pixel/index.js +52 -0
- package/src/util/filter/pixel/invert.js +16 -0
- package/src/util/filter/pixel/kodachrome.js +23 -0
- package/src/util/filter/pixel/matrix.js +28 -0
- package/src/util/filter/pixel/noise.js +24 -0
- package/src/util/filter/pixel/opacity.js +14 -0
- package/src/util/filter/pixel/polaroid.js +23 -0
- package/src/util/filter/pixel/saturation.js +30 -0
- package/src/util/filter/pixel/sepia.js +28 -0
- package/src/util/filter/pixel/shade.js +21 -0
- package/src/util/filter/pixel/shift.js +23 -0
- package/src/util/filter/pixel/solarize.js +23 -0
- package/src/util/filter/pixel/technicolor.js +23 -0
- package/src/util/filter/pixel/threshold-color.js +35 -0
- package/src/util/filter/pixel/threshold.js +7 -0
- package/src/util/filter/pixel/tint.js +20 -0
- package/src/util/functions/formatter.js +99 -0
- package/src/util/functions/fromCMYK.js +17 -0
- package/src/util/functions/fromHSL.js +52 -0
- package/src/util/functions/fromHSV.js +64 -0
- package/src/util/functions/fromLAB.js +99 -0
- package/src/util/functions/fromRGB.js +220 -0
- package/src/util/functions/fromYCrCb.js +16 -0
- package/src/util/functions/func.js +194 -0
- package/src/util/functions/image.js +145 -0
- package/src/util/functions/math.js +56 -0
- package/src/util/functions/mixin.js +164 -0
- package/src/util/functions/parser.js +294 -0
- package/src/util/gl/filter/index.js +9 -0
- package/src/util/gl/filter/matrix/blur.js +9 -0
- package/src/util/gl/filter/matrix/emboss.js +17 -0
- package/src/util/gl/filter/matrix/gaussian-blur-5x.js +15 -0
- package/src/util/gl/filter/matrix/gaussian-blur.js +19 -0
- package/src/util/gl/filter/matrix/grayscale2.js +13 -0
- package/src/util/gl/filter/matrix/index.js +55 -0
- package/src/util/gl/filter/matrix/kirsch-horizontal.js +11 -0
- package/src/util/gl/filter/matrix/kirsch-vertical.js +11 -0
- package/src/util/gl/filter/matrix/laplacian-5x.js +13 -0
- package/src/util/gl/filter/matrix/laplacian.js +11 -0
- package/src/util/gl/filter/matrix/motion-blur-2.js +17 -0
- package/src/util/gl/filter/matrix/motion-blur-3.js +17 -0
- package/src/util/gl/filter/matrix/motion-blur.js +17 -0
- package/src/util/gl/filter/matrix/negative.js +13 -0
- package/src/util/gl/filter/matrix/normal.js +8 -0
- package/src/util/gl/filter/matrix/sepia2.js +13 -0
- package/src/util/gl/filter/matrix/sharpen.js +11 -0
- package/src/util/gl/filter/matrix/sobel-horizontal.js +11 -0
- package/src/util/gl/filter/matrix/sobel-vertical.js +11 -0
- package/src/util/gl/filter/matrix/transparency.js +13 -0
- package/src/util/gl/filter/matrix/unsharp-masking.js +14 -0
- package/src/util/gl/filter/multi/index.js +9 -0
- package/src/util/gl/filter/multi/kirsch.js +7 -0
- package/src/util/gl/filter/multi/sobel.js +7 -0
- package/src/util/gl/filter/multi/vintage.js +7 -0
- package/src/util/gl/filter/pixel/bitonal.js +22 -0
- package/src/util/gl/filter/pixel/brightness.js +14 -0
- package/src/util/gl/filter/pixel/brownie.js +11 -0
- package/src/util/gl/filter/pixel/chaos.js +20 -0
- package/src/util/gl/filter/pixel/clip.js +20 -0
- package/src/util/gl/filter/pixel/contrast.js +16 -0
- package/src/util/gl/filter/pixel/gamma.js +16 -0
- package/src/util/gl/filter/pixel/gradient.js +59 -0
- package/src/util/gl/filter/pixel/grayscale.js +22 -0
- package/src/util/gl/filter/pixel/hue.js +19 -0
- package/src/util/gl/filter/pixel/index.js +54 -0
- package/src/util/gl/filter/pixel/invert.js +18 -0
- package/src/util/gl/filter/pixel/kodachrome.js +11 -0
- package/src/util/gl/filter/pixel/matrix.js +29 -0
- package/src/util/gl/filter/pixel/noise.js +18 -0
- package/src/util/gl/filter/pixel/opacity.js +17 -0
- package/src/util/gl/filter/pixel/polaroid.js +11 -0
- package/src/util/gl/filter/pixel/saturation.js +20 -0
- package/src/util/gl/filter/pixel/sepia.js +19 -0
- package/src/util/gl/filter/pixel/shade.js +20 -0
- package/src/util/gl/filter/pixel/shift.js +11 -0
- package/src/util/gl/filter/pixel/solarize.js +21 -0
- package/src/util/gl/filter/pixel/technicolor.js +11 -0
- package/src/util/gl/filter/pixel/threshold-color.js +15 -0
- package/src/util/gl/filter/pixel/threshold.js +7 -0
- package/src/util/gl/filter/pixel/tint.js +25 -0
- package/src/util/gl/filter/util.js +185 -0
- package/src/util/gl/functions.js +158 -0
- package/src/util/gl/index.js +543 -0
- package/src/util/index.js +17 -0
- package/stand.html +975 -0
- package/test/util.Blend.spec.js +15 -0
- package/test/util.Color.spec.js +200 -0
- package/test/util.Filter.spec.js +12 -0
- package/test/util.ImageFilter.spec.js +16 -0
@@ -0,0 +1,76 @@
|
|
1
|
+
import { sep } from "path";
|
2
|
+
|
3
|
+
// refer to https://www.w3.org/TR/compositing-1
|
4
|
+
var modes = {
|
5
|
+
normal ( back, source) {
|
6
|
+
return source;
|
7
|
+
},
|
8
|
+
multiply (back, source) {
|
9
|
+
return back * source ;
|
10
|
+
},
|
11
|
+
screen (back, source) {
|
12
|
+
return back + source -(back * source);
|
13
|
+
},
|
14
|
+
overlay (back, source) {
|
15
|
+
return this.hardlight(back, source)
|
16
|
+
},
|
17
|
+
hardlight (back, source) {
|
18
|
+
if(source <= 0.5)
|
19
|
+
return this.multiply(back, 2 * source)
|
20
|
+
else
|
21
|
+
return this.screen(back, 2 * source - 1)
|
22
|
+
},
|
23
|
+
diffuse (c) {
|
24
|
+
if(c <= 0.25)
|
25
|
+
return ((16 * c - 12) * c + 4) * c
|
26
|
+
else
|
27
|
+
return Math.sqrt(c)
|
28
|
+
},
|
29
|
+
|
30
|
+
softlight (back, source) {
|
31
|
+
if(source <= 0.5)
|
32
|
+
return back - (1 - 2 * source) * back * (1 - back)
|
33
|
+
else
|
34
|
+
return back + (2 * source - 1) * (this.diffuse(back) - back)
|
35
|
+
},
|
36
|
+
difference (back, source) {
|
37
|
+
return Math.abs(back, source);
|
38
|
+
},
|
39
|
+
exclusion (back, source) {
|
40
|
+
return back + source - 2 * back * source
|
41
|
+
},
|
42
|
+
darken (back, source) {
|
43
|
+
return Math.min(back, source)
|
44
|
+
},
|
45
|
+
lighten (back, source) {
|
46
|
+
return Math.max(back, source)
|
47
|
+
},
|
48
|
+
colordodge (back, source) {
|
49
|
+
if(back == 0) return 0;
|
50
|
+
else if(source == 1) return 1;
|
51
|
+
else Math.min(1, back / (1 - source))
|
52
|
+
},
|
53
|
+
colorburn (back, source) {
|
54
|
+
if(back == 1) return 1;
|
55
|
+
else if(source == 0) return 0;
|
56
|
+
else 1 - Math.min(1, (1 - back) / source)
|
57
|
+
}
|
58
|
+
}
|
59
|
+
|
60
|
+
function separable (back, source, mode) {
|
61
|
+
return {
|
62
|
+
r : modes[mode](back.r / 255, source.r / 255) * 255,
|
63
|
+
g : modes[mode](back.g / 255, source.g / 255) * 255,
|
64
|
+
b : modes[mode](back.b / 255, source.b / 255) * 255,
|
65
|
+
a : source.a
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
// alias
|
70
|
+
Object.keys(modes).forEach(mode => {
|
71
|
+
separable[mode] = function (back, source) {
|
72
|
+
return separable(back, source, mode);
|
73
|
+
}
|
74
|
+
})
|
75
|
+
|
76
|
+
export default separable;
|
@@ -0,0 +1,517 @@
|
|
1
|
+
/*
|
2
|
+
|
3
|
+
StackBlur - a fast almost Gaussian Blur For Canvas
|
4
|
+
|
5
|
+
Version: 0.5
|
6
|
+
Author: Mario Klingemann
|
7
|
+
Contact: mario@quasimondo.com
|
8
|
+
Website: http://www.quasimondo.com/StackBlurForCanvas
|
9
|
+
Twitter: @quasimondo
|
10
|
+
|
11
|
+
In case you find this class useful - especially in commercial projects -
|
12
|
+
I am not totally unhappy for a small donation to my PayPal account
|
13
|
+
mario@quasimondo.de
|
14
|
+
|
15
|
+
Or support me on flattr:
|
16
|
+
https://flattr.com/thing/72791/StackBlur-a-fast-almost-Gaussian-Blur-Effect-for-CanvasJavascript
|
17
|
+
|
18
|
+
Copyright (c) 2010 Mario Klingemann
|
19
|
+
|
20
|
+
Permission is hereby granted, free of charge, to any person
|
21
|
+
obtaining a copy of this software and associated documentation
|
22
|
+
files (the "Software"), to deal in the Software without
|
23
|
+
restriction, including without limitation the rights to use,
|
24
|
+
copy, modify, merge, publish, distribute, sublicense, and/or sell
|
25
|
+
copies of the Software, and to permit persons to whom the
|
26
|
+
Software is furnished to do so, subject to the following
|
27
|
+
conditions:
|
28
|
+
|
29
|
+
The above copyright notice and this permission notice shall be
|
30
|
+
included in all copies or substantial portions of the Software.
|
31
|
+
|
32
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
33
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
34
|
+
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
35
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
36
|
+
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
37
|
+
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
38
|
+
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
39
|
+
OTHER DEALINGS IN THE SOFTWARE.
|
40
|
+
*/
|
41
|
+
|
42
|
+
var mul_table = [
|
43
|
+
512, 512, 456, 512, 328, 456, 335, 512, 405, 328, 271, 456, 388, 335, 292, 512,
|
44
|
+
454, 405, 364, 328, 298, 271, 496, 456, 420, 388, 360, 335, 312, 292, 273, 512,
|
45
|
+
482, 454, 428, 405, 383, 364, 345, 328, 312, 298, 284, 271, 259, 496, 475, 456,
|
46
|
+
437, 420, 404, 388, 374, 360, 347, 335, 323, 312, 302, 292, 282, 273, 265, 512,
|
47
|
+
497, 482, 468, 454, 441, 428, 417, 405, 394, 383, 373, 364, 354, 345, 337, 328,
|
48
|
+
320, 312, 305, 298, 291, 284, 278, 271, 265, 259, 507, 496, 485, 475, 465, 456,
|
49
|
+
446, 437, 428, 420, 412, 404, 396, 388, 381, 374, 367, 360, 354, 347, 341, 335,
|
50
|
+
329, 323, 318, 312, 307, 302, 297, 292, 287, 282, 278, 273, 269, 265, 261, 512,
|
51
|
+
505, 497, 489, 482, 475, 468, 461, 454, 447, 441, 435, 428, 422, 417, 411, 405,
|
52
|
+
399, 394, 389, 383, 378, 373, 368, 364, 359, 354, 350, 345, 341, 337, 332, 328,
|
53
|
+
324, 320, 316, 312, 309, 305, 301, 298, 294, 291, 287, 284, 281, 278, 274, 271,
|
54
|
+
268, 265, 262, 259, 257, 507, 501, 496, 491, 485, 480, 475, 470, 465, 460, 456,
|
55
|
+
451, 446, 442, 437, 433, 428, 424, 420, 416, 412, 408, 404, 400, 396, 392, 388,
|
56
|
+
385, 381, 377, 374, 370, 367, 363, 360, 357, 354, 350, 347, 344, 341, 338, 335,
|
57
|
+
332, 329, 326, 323, 320, 318, 315, 312, 310, 307, 304, 302, 299, 297, 294, 292,
|
58
|
+
289, 287, 285, 282, 280, 278, 275, 273, 271, 269, 267, 265, 263, 261, 259
|
59
|
+
];
|
60
|
+
|
61
|
+
|
62
|
+
var shg_table = [
|
63
|
+
9, 11, 12, 13, 13, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 17,
|
64
|
+
17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19,
|
65
|
+
19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 19, 20, 20, 20,
|
66
|
+
20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 21,
|
67
|
+
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21,
|
68
|
+
21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22,
|
69
|
+
22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22,
|
70
|
+
22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23,
|
71
|
+
23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
|
72
|
+
23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
|
73
|
+
23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23, 23,
|
74
|
+
23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
|
75
|
+
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
|
76
|
+
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
|
77
|
+
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
|
78
|
+
24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24
|
79
|
+
];
|
80
|
+
|
81
|
+
|
82
|
+
function BlurStack() {
|
83
|
+
this.r = 0;
|
84
|
+
this.g = 0;
|
85
|
+
this.b = 0;
|
86
|
+
this.a = 0;
|
87
|
+
this.next = null;
|
88
|
+
}
|
89
|
+
|
90
|
+
function stackBlurImage(bitmap, radius, blurAlphaChannel) {
|
91
|
+
|
92
|
+
if (blurAlphaChannel)
|
93
|
+
return stackBlurCanvasRGBA(bitmap, 0, 0, radius);
|
94
|
+
else
|
95
|
+
return stackBlurCanvasRGB(bitmap, 0, 0, radius);
|
96
|
+
}
|
97
|
+
|
98
|
+
|
99
|
+
function stackBlurCanvasRGBA(bitmap, top_x, top_y, radius) {
|
100
|
+
if (isNaN(radius) || radius < 1) return bitmap;
|
101
|
+
radius |= 0;
|
102
|
+
|
103
|
+
const {pixels, width, height } = bitmap
|
104
|
+
var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum, a_sum,
|
105
|
+
r_out_sum, g_out_sum, b_out_sum, a_out_sum,
|
106
|
+
r_in_sum, g_in_sum, b_in_sum, a_in_sum,
|
107
|
+
pr, pg, pb, pa, rbs;
|
108
|
+
|
109
|
+
var div = radius + radius + 1;
|
110
|
+
var w4 = width << 2;
|
111
|
+
var widthMinus1 = width - 1;
|
112
|
+
var heightMinus1 = height - 1;
|
113
|
+
var radiusPlus1 = radius + 1;
|
114
|
+
var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;
|
115
|
+
|
116
|
+
var stackStart = new BlurStack();
|
117
|
+
var stack = stackStart;
|
118
|
+
for (i = 1; i < div; i++) {
|
119
|
+
stack = stack.next = new BlurStack();
|
120
|
+
if (i == radiusPlus1) var stackEnd = stack;
|
121
|
+
}
|
122
|
+
stack.next = stackStart;
|
123
|
+
var stackIn = null;
|
124
|
+
var stackOut = null;
|
125
|
+
|
126
|
+
yw = yi = 0;
|
127
|
+
|
128
|
+
var mul_sum = mul_table[radius];
|
129
|
+
var shg_sum = shg_table[radius];
|
130
|
+
|
131
|
+
for (y = 0; y < height; y++) {
|
132
|
+
r_in_sum = g_in_sum = b_in_sum = a_in_sum = r_sum = g_sum = b_sum = a_sum = 0;
|
133
|
+
|
134
|
+
r_out_sum = radiusPlus1 * (pr = pixels[yi]);
|
135
|
+
g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);
|
136
|
+
b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);
|
137
|
+
a_out_sum = radiusPlus1 * (pa = pixels[yi + 3]);
|
138
|
+
|
139
|
+
r_sum += sumFactor * pr;
|
140
|
+
g_sum += sumFactor * pg;
|
141
|
+
b_sum += sumFactor * pb;
|
142
|
+
a_sum += sumFactor * pa;
|
143
|
+
|
144
|
+
stack = stackStart;
|
145
|
+
|
146
|
+
for (i = 0; i < radiusPlus1; i++) {
|
147
|
+
stack.r = pr;
|
148
|
+
stack.g = pg;
|
149
|
+
stack.b = pb;
|
150
|
+
stack.a = pa;
|
151
|
+
stack = stack.next;
|
152
|
+
}
|
153
|
+
|
154
|
+
for (i = 1; i < radiusPlus1; i++) {
|
155
|
+
p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);
|
156
|
+
r_sum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);
|
157
|
+
g_sum += (stack.g = (pg = pixels[p + 1])) * rbs;
|
158
|
+
b_sum += (stack.b = (pb = pixels[p + 2])) * rbs;
|
159
|
+
a_sum += (stack.a = (pa = pixels[p + 3])) * rbs;
|
160
|
+
|
161
|
+
r_in_sum += pr;
|
162
|
+
g_in_sum += pg;
|
163
|
+
b_in_sum += pb;
|
164
|
+
a_in_sum += pa;
|
165
|
+
|
166
|
+
stack = stack.next;
|
167
|
+
}
|
168
|
+
|
169
|
+
|
170
|
+
stackIn = stackStart;
|
171
|
+
stackOut = stackEnd;
|
172
|
+
for (x = 0; x < width; x++) {
|
173
|
+
pixels[yi + 3] = pa = (a_sum * mul_sum) >> shg_sum;
|
174
|
+
if (pa != 0) {
|
175
|
+
pa = 255 / pa;
|
176
|
+
pixels[yi] = ((r_sum * mul_sum) >> shg_sum) * pa;
|
177
|
+
pixels[yi + 1] = ((g_sum * mul_sum) >> shg_sum) * pa;
|
178
|
+
pixels[yi + 2] = ((b_sum * mul_sum) >> shg_sum) * pa;
|
179
|
+
} else {
|
180
|
+
pixels[yi] = pixels[yi + 1] = pixels[yi + 2] = 0;
|
181
|
+
}
|
182
|
+
|
183
|
+
r_sum -= r_out_sum;
|
184
|
+
g_sum -= g_out_sum;
|
185
|
+
b_sum -= b_out_sum;
|
186
|
+
a_sum -= a_out_sum;
|
187
|
+
|
188
|
+
r_out_sum -= stackIn.r;
|
189
|
+
g_out_sum -= stackIn.g;
|
190
|
+
b_out_sum -= stackIn.b;
|
191
|
+
a_out_sum -= stackIn.a;
|
192
|
+
|
193
|
+
p = (yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1)) << 2;
|
194
|
+
|
195
|
+
r_in_sum += (stackIn.r = pixels[p]);
|
196
|
+
g_in_sum += (stackIn.g = pixels[p + 1]);
|
197
|
+
b_in_sum += (stackIn.b = pixels[p + 2]);
|
198
|
+
a_in_sum += (stackIn.a = pixels[p + 3]);
|
199
|
+
|
200
|
+
r_sum += r_in_sum;
|
201
|
+
g_sum += g_in_sum;
|
202
|
+
b_sum += b_in_sum;
|
203
|
+
a_sum += a_in_sum;
|
204
|
+
|
205
|
+
stackIn = stackIn.next;
|
206
|
+
|
207
|
+
r_out_sum += (pr = stackOut.r);
|
208
|
+
g_out_sum += (pg = stackOut.g);
|
209
|
+
b_out_sum += (pb = stackOut.b);
|
210
|
+
a_out_sum += (pa = stackOut.a);
|
211
|
+
|
212
|
+
r_in_sum -= pr;
|
213
|
+
g_in_sum -= pg;
|
214
|
+
b_in_sum -= pb;
|
215
|
+
a_in_sum -= pa;
|
216
|
+
|
217
|
+
stackOut = stackOut.next;
|
218
|
+
|
219
|
+
yi += 4;
|
220
|
+
}
|
221
|
+
yw += width;
|
222
|
+
}
|
223
|
+
|
224
|
+
|
225
|
+
for (x = 0; x < width; x++) {
|
226
|
+
g_in_sum = b_in_sum = a_in_sum = r_in_sum = g_sum = b_sum = a_sum = r_sum = 0;
|
227
|
+
|
228
|
+
yi = x << 2;
|
229
|
+
r_out_sum = radiusPlus1 * (pr = pixels[yi]);
|
230
|
+
g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);
|
231
|
+
b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);
|
232
|
+
a_out_sum = radiusPlus1 * (pa = pixels[yi + 3]);
|
233
|
+
|
234
|
+
r_sum += sumFactor * pr;
|
235
|
+
g_sum += sumFactor * pg;
|
236
|
+
b_sum += sumFactor * pb;
|
237
|
+
a_sum += sumFactor * pa;
|
238
|
+
|
239
|
+
stack = stackStart;
|
240
|
+
|
241
|
+
for (i = 0; i < radiusPlus1; i++) {
|
242
|
+
stack.r = pr;
|
243
|
+
stack.g = pg;
|
244
|
+
stack.b = pb;
|
245
|
+
stack.a = pa;
|
246
|
+
stack = stack.next;
|
247
|
+
}
|
248
|
+
|
249
|
+
yp = width;
|
250
|
+
|
251
|
+
for (i = 1; i <= radius; i++) {
|
252
|
+
yi = (yp + x) << 2;
|
253
|
+
|
254
|
+
r_sum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);
|
255
|
+
g_sum += (stack.g = (pg = pixels[yi + 1])) * rbs;
|
256
|
+
b_sum += (stack.b = (pb = pixels[yi + 2])) * rbs;
|
257
|
+
a_sum += (stack.a = (pa = pixels[yi + 3])) * rbs;
|
258
|
+
|
259
|
+
r_in_sum += pr;
|
260
|
+
g_in_sum += pg;
|
261
|
+
b_in_sum += pb;
|
262
|
+
a_in_sum += pa;
|
263
|
+
|
264
|
+
stack = stack.next;
|
265
|
+
|
266
|
+
if (i < heightMinus1) {
|
267
|
+
yp += width;
|
268
|
+
}
|
269
|
+
}
|
270
|
+
|
271
|
+
yi = x;
|
272
|
+
stackIn = stackStart;
|
273
|
+
stackOut = stackEnd;
|
274
|
+
for (y = 0; y < height; y++) {
|
275
|
+
p = yi << 2;
|
276
|
+
pixels[p + 3] = pa = (a_sum * mul_sum) >> shg_sum;
|
277
|
+
if (pa > 0) {
|
278
|
+
pa = 255 / pa;
|
279
|
+
pixels[p] = ((r_sum * mul_sum) >> shg_sum) * pa;
|
280
|
+
pixels[p + 1] = ((g_sum * mul_sum) >> shg_sum) * pa;
|
281
|
+
pixels[p + 2] = ((b_sum * mul_sum) >> shg_sum) * pa;
|
282
|
+
} else {
|
283
|
+
pixels[p] = pixels[p + 1] = pixels[p + 2] = 0;
|
284
|
+
}
|
285
|
+
|
286
|
+
r_sum -= r_out_sum;
|
287
|
+
g_sum -= g_out_sum;
|
288
|
+
b_sum -= b_out_sum;
|
289
|
+
a_sum -= a_out_sum;
|
290
|
+
|
291
|
+
r_out_sum -= stackIn.r;
|
292
|
+
g_out_sum -= stackIn.g;
|
293
|
+
b_out_sum -= stackIn.b;
|
294
|
+
a_out_sum -= stackIn.a;
|
295
|
+
|
296
|
+
p = (x + (((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width)) << 2;
|
297
|
+
|
298
|
+
r_sum += (r_in_sum += (stackIn.r = pixels[p]));
|
299
|
+
g_sum += (g_in_sum += (stackIn.g = pixels[p + 1]));
|
300
|
+
b_sum += (b_in_sum += (stackIn.b = pixels[p + 2]));
|
301
|
+
a_sum += (a_in_sum += (stackIn.a = pixels[p + 3]));
|
302
|
+
|
303
|
+
stackIn = stackIn.next;
|
304
|
+
|
305
|
+
r_out_sum += (pr = stackOut.r);
|
306
|
+
g_out_sum += (pg = stackOut.g);
|
307
|
+
b_out_sum += (pb = stackOut.b);
|
308
|
+
a_out_sum += (pa = stackOut.a);
|
309
|
+
|
310
|
+
r_in_sum -= pr;
|
311
|
+
g_in_sum -= pg;
|
312
|
+
b_in_sum -= pb;
|
313
|
+
a_in_sum -= pa;
|
314
|
+
|
315
|
+
stackOut = stackOut.next;
|
316
|
+
|
317
|
+
yi += width;
|
318
|
+
}
|
319
|
+
}
|
320
|
+
|
321
|
+
return bitmap
|
322
|
+
}
|
323
|
+
|
324
|
+
|
325
|
+
function stackBlurCanvasRGBA(bitmap, top_x, top_y, radius) {
|
326
|
+
if (isNaN(radius) || radius < 1) return bitmap;
|
327
|
+
radius |= 0;
|
328
|
+
|
329
|
+
const {pixels, width, height } = bitmap
|
330
|
+
var x, y, i, p, yp, yi, yw, r_sum, g_sum, b_sum,
|
331
|
+
r_out_sum, g_out_sum, b_out_sum,
|
332
|
+
r_in_sum, g_in_sum, b_in_sum,
|
333
|
+
pr, pg, pb, rbs;
|
334
|
+
|
335
|
+
var div = radius + radius + 1;
|
336
|
+
var w4 = width << 2;
|
337
|
+
var widthMinus1 = width - 1;
|
338
|
+
var heightMinus1 = height - 1;
|
339
|
+
var radiusPlus1 = radius + 1;
|
340
|
+
var sumFactor = radiusPlus1 * (radiusPlus1 + 1) / 2;
|
341
|
+
|
342
|
+
var stackStart = new BlurStack();
|
343
|
+
var stack = stackStart;
|
344
|
+
for (i = 1; i < div; i++) {
|
345
|
+
stack = stack.next = new BlurStack();
|
346
|
+
if (i == radiusPlus1) var stackEnd = stack;
|
347
|
+
}
|
348
|
+
stack.next = stackStart;
|
349
|
+
var stackIn = null;
|
350
|
+
var stackOut = null;
|
351
|
+
|
352
|
+
yw = yi = 0;
|
353
|
+
|
354
|
+
var mul_sum = mul_table[radius];
|
355
|
+
var shg_sum = shg_table[radius];
|
356
|
+
|
357
|
+
for (y = 0; y < height; y++) {
|
358
|
+
r_in_sum = g_in_sum = b_in_sum = r_sum = g_sum = b_sum = 0;
|
359
|
+
|
360
|
+
r_out_sum = radiusPlus1 * (pr = pixels[yi]);
|
361
|
+
g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);
|
362
|
+
b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);
|
363
|
+
|
364
|
+
r_sum += sumFactor * pr;
|
365
|
+
g_sum += sumFactor * pg;
|
366
|
+
b_sum += sumFactor * pb;
|
367
|
+
|
368
|
+
stack = stackStart;
|
369
|
+
|
370
|
+
for (i = 0; i < radiusPlus1; i++) {
|
371
|
+
stack.r = pr;
|
372
|
+
stack.g = pg;
|
373
|
+
stack.b = pb;
|
374
|
+
stack = stack.next;
|
375
|
+
}
|
376
|
+
|
377
|
+
for (i = 1; i < radiusPlus1; i++) {
|
378
|
+
p = yi + ((widthMinus1 < i ? widthMinus1 : i) << 2);
|
379
|
+
r_sum += (stack.r = (pr = pixels[p])) * (rbs = radiusPlus1 - i);
|
380
|
+
g_sum += (stack.g = (pg = pixels[p + 1])) * rbs;
|
381
|
+
b_sum += (stack.b = (pb = pixels[p + 2])) * rbs;
|
382
|
+
|
383
|
+
r_in_sum += pr;
|
384
|
+
g_in_sum += pg;
|
385
|
+
b_in_sum += pb;
|
386
|
+
|
387
|
+
stack = stack.next;
|
388
|
+
}
|
389
|
+
|
390
|
+
|
391
|
+
stackIn = stackStart;
|
392
|
+
stackOut = stackEnd;
|
393
|
+
for (x = 0; x < width; x++) {
|
394
|
+
pixels[yi] = (r_sum * mul_sum) >> shg_sum;
|
395
|
+
pixels[yi + 1] = (g_sum * mul_sum) >> shg_sum;
|
396
|
+
pixels[yi + 2] = (b_sum * mul_sum) >> shg_sum;
|
397
|
+
|
398
|
+
r_sum -= r_out_sum;
|
399
|
+
g_sum -= g_out_sum;
|
400
|
+
b_sum -= b_out_sum;
|
401
|
+
|
402
|
+
r_out_sum -= stackIn.r;
|
403
|
+
g_out_sum -= stackIn.g;
|
404
|
+
b_out_sum -= stackIn.b;
|
405
|
+
|
406
|
+
p = (yw + ((p = x + radius + 1) < widthMinus1 ? p : widthMinus1)) << 2;
|
407
|
+
|
408
|
+
r_in_sum += (stackIn.r = pixels[p]);
|
409
|
+
g_in_sum += (stackIn.g = pixels[p + 1]);
|
410
|
+
b_in_sum += (stackIn.b = pixels[p + 2]);
|
411
|
+
|
412
|
+
r_sum += r_in_sum;
|
413
|
+
g_sum += g_in_sum;
|
414
|
+
b_sum += b_in_sum;
|
415
|
+
|
416
|
+
stackIn = stackIn.next;
|
417
|
+
|
418
|
+
r_out_sum += (pr = stackOut.r);
|
419
|
+
g_out_sum += (pg = stackOut.g);
|
420
|
+
b_out_sum += (pb = stackOut.b);
|
421
|
+
|
422
|
+
r_in_sum -= pr;
|
423
|
+
g_in_sum -= pg;
|
424
|
+
b_in_sum -= pb;
|
425
|
+
|
426
|
+
stackOut = stackOut.next;
|
427
|
+
|
428
|
+
yi += 4;
|
429
|
+
}
|
430
|
+
yw += width;
|
431
|
+
}
|
432
|
+
|
433
|
+
|
434
|
+
for (x = 0; x < width; x++) {
|
435
|
+
g_in_sum = b_in_sum = r_in_sum = g_sum = b_sum = r_sum = 0;
|
436
|
+
|
437
|
+
yi = x << 2;
|
438
|
+
r_out_sum = radiusPlus1 * (pr = pixels[yi]);
|
439
|
+
g_out_sum = radiusPlus1 * (pg = pixels[yi + 1]);
|
440
|
+
b_out_sum = radiusPlus1 * (pb = pixels[yi + 2]);
|
441
|
+
|
442
|
+
r_sum += sumFactor * pr;
|
443
|
+
g_sum += sumFactor * pg;
|
444
|
+
b_sum += sumFactor * pb;
|
445
|
+
|
446
|
+
stack = stackStart;
|
447
|
+
|
448
|
+
for (i = 0; i < radiusPlus1; i++) {
|
449
|
+
stack.r = pr;
|
450
|
+
stack.g = pg;
|
451
|
+
stack.b = pb;
|
452
|
+
stack = stack.next;
|
453
|
+
}
|
454
|
+
|
455
|
+
yp = width;
|
456
|
+
|
457
|
+
for (i = 1; i <= radius; i++) {
|
458
|
+
yi = (yp + x) << 2;
|
459
|
+
|
460
|
+
r_sum += (stack.r = (pr = pixels[yi])) * (rbs = radiusPlus1 - i);
|
461
|
+
g_sum += (stack.g = (pg = pixels[yi + 1])) * rbs;
|
462
|
+
b_sum += (stack.b = (pb = pixels[yi + 2])) * rbs;
|
463
|
+
|
464
|
+
r_in_sum += pr;
|
465
|
+
g_in_sum += pg;
|
466
|
+
b_in_sum += pb;
|
467
|
+
|
468
|
+
stack = stack.next;
|
469
|
+
|
470
|
+
if (i < heightMinus1) {
|
471
|
+
yp += width;
|
472
|
+
}
|
473
|
+
}
|
474
|
+
|
475
|
+
yi = x;
|
476
|
+
stackIn = stackStart;
|
477
|
+
stackOut = stackEnd;
|
478
|
+
for (y = 0; y < height; y++) {
|
479
|
+
p = yi << 2;
|
480
|
+
pixels[p] = (r_sum * mul_sum) >> shg_sum;
|
481
|
+
pixels[p + 1] = (g_sum * mul_sum) >> shg_sum;
|
482
|
+
pixels[p + 2] = (b_sum * mul_sum) >> shg_sum;
|
483
|
+
|
484
|
+
r_sum -= r_out_sum;
|
485
|
+
g_sum -= g_out_sum;
|
486
|
+
b_sum -= b_out_sum;
|
487
|
+
|
488
|
+
r_out_sum -= stackIn.r;
|
489
|
+
g_out_sum -= stackIn.g;
|
490
|
+
b_out_sum -= stackIn.b;
|
491
|
+
|
492
|
+
p = (x + (((p = y + radiusPlus1) < heightMinus1 ? p : heightMinus1) * width)) << 2;
|
493
|
+
|
494
|
+
r_sum += (r_in_sum += (stackIn.r = pixels[p]));
|
495
|
+
g_sum += (g_in_sum += (stackIn.g = pixels[p + 1]));
|
496
|
+
b_sum += (b_in_sum += (stackIn.b = pixels[p + 2]));
|
497
|
+
|
498
|
+
stackIn = stackIn.next;
|
499
|
+
|
500
|
+
r_out_sum += (pr = stackOut.r);
|
501
|
+
g_out_sum += (pg = stackOut.g);
|
502
|
+
b_out_sum += (pb = stackOut.b);
|
503
|
+
|
504
|
+
r_in_sum -= pr;
|
505
|
+
g_in_sum -= pg;
|
506
|
+
b_in_sum -= pb;
|
507
|
+
|
508
|
+
stackOut = stackOut.next;
|
509
|
+
|
510
|
+
yi += width;
|
511
|
+
}
|
512
|
+
}
|
513
|
+
|
514
|
+
return bitmap
|
515
|
+
}
|
516
|
+
|
517
|
+
export default stackBlurImage
|