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,185 @@
|
|
1
|
+
export function parseParamNumber (param) {
|
2
|
+
if (typeof param === 'string') {
|
3
|
+
param = param.replace(/deg/, '')
|
4
|
+
param = param.replace(/px/, '')
|
5
|
+
}
|
6
|
+
return +param
|
7
|
+
}
|
8
|
+
|
9
|
+
export function weight(arr, num = 1) {
|
10
|
+
return arr.map(i => {
|
11
|
+
return i * num;
|
12
|
+
})
|
13
|
+
}
|
14
|
+
|
15
|
+
let SHADER_INDEX = 0
|
16
|
+
|
17
|
+
function convolutionString (count) {
|
18
|
+
|
19
|
+
var width = Math.sqrt(count)
|
20
|
+
var half = Math.floor(width/2)
|
21
|
+
|
22
|
+
|
23
|
+
return [...Array(count)].map((it, index) => {
|
24
|
+
const y = Math.floor(index / width) - half
|
25
|
+
const x = index % width - half
|
26
|
+
|
27
|
+
return `texture(u_image, v_texCoord + onePixel * vec2(${x}, ${y})) * u_kernel${count}[${index}]`
|
28
|
+
}).join(' + \n')
|
29
|
+
}
|
30
|
+
|
31
|
+
export function multi (str) {
|
32
|
+
return [...arguments];
|
33
|
+
}
|
34
|
+
|
35
|
+
export function convolution(arr) {
|
36
|
+
|
37
|
+
return {
|
38
|
+
type: 'convolution',
|
39
|
+
length: arr.length,
|
40
|
+
content: arr
|
41
|
+
}
|
42
|
+
}
|
43
|
+
|
44
|
+
function makeShader (str , index) {
|
45
|
+
return `
|
46
|
+
if (u_filterIndex == ${index}.0) {
|
47
|
+
${str}
|
48
|
+
}
|
49
|
+
`
|
50
|
+
}
|
51
|
+
|
52
|
+
export function shader(str, options) {
|
53
|
+
return {
|
54
|
+
type: 'shader',
|
55
|
+
index: SHADER_INDEX,
|
56
|
+
options,
|
57
|
+
content: makeShader(str, SHADER_INDEX++)
|
58
|
+
}
|
59
|
+
}
|
60
|
+
|
61
|
+
|
62
|
+
export function makeVertexShaderSource () {
|
63
|
+
return `#version 300 es
|
64
|
+
|
65
|
+
in vec2 a_position;
|
66
|
+
in vec2 a_texCoord;
|
67
|
+
|
68
|
+
uniform vec2 u_resolution;
|
69
|
+
uniform float u_flipY;
|
70
|
+
|
71
|
+
out vec2 v_texCoord;
|
72
|
+
|
73
|
+
void main() {
|
74
|
+
vec2 zeroToOne = a_position / u_resolution;
|
75
|
+
|
76
|
+
vec2 zeroToTwo = zeroToOne * 2.0;
|
77
|
+
|
78
|
+
vec2 clipSpace = zeroToTwo - 1.0;
|
79
|
+
|
80
|
+
gl_Position = vec4(clipSpace * vec2(1, u_flipY), 0, 1);
|
81
|
+
|
82
|
+
v_texCoord = a_texCoord;
|
83
|
+
|
84
|
+
}
|
85
|
+
`
|
86
|
+
}
|
87
|
+
|
88
|
+
function makeConvolution(count) {
|
89
|
+
|
90
|
+
return `
|
91
|
+
|
92
|
+
if (u_kernelSelect == ${count}.0) {
|
93
|
+
vec4 colorSum = ${convolutionString(count)};
|
94
|
+
|
95
|
+
outColor = vec4((colorSum / u_kernel${count}Weight).rgb, 1);
|
96
|
+
|
97
|
+
}
|
98
|
+
`
|
99
|
+
}
|
100
|
+
|
101
|
+
export function makeFragmentShaderSource (filterShaderList) {
|
102
|
+
|
103
|
+
const filterContent = filterShaderList.filter(f => f.type == 'shader').map(f => f.content).join('\n\n')
|
104
|
+
|
105
|
+
const weightTable = {'9': true}
|
106
|
+
|
107
|
+
filterShaderList.filter(f => f.type == 'convolution').forEach(f => {
|
108
|
+
weightTable[f.length] = true
|
109
|
+
})
|
110
|
+
|
111
|
+
const convolutionString = Object.keys(weightTable).map(len => {
|
112
|
+
return makeConvolution(+len)
|
113
|
+
}).join('\n')
|
114
|
+
|
115
|
+
|
116
|
+
return `#version 300 es
|
117
|
+
|
118
|
+
precision highp int;
|
119
|
+
precision mediump float;
|
120
|
+
|
121
|
+
uniform sampler2D u_image;
|
122
|
+
|
123
|
+
// 3 is 3x3 matrix kernel
|
124
|
+
uniform float u_kernelSelect;
|
125
|
+
uniform float u_filterIndex;
|
126
|
+
|
127
|
+
uniform float u_kernel9[9];
|
128
|
+
uniform float u_kernel9Weight;
|
129
|
+
uniform float u_kernel25[25];
|
130
|
+
uniform float u_kernel25Weight;
|
131
|
+
uniform float u_kernel49[49];
|
132
|
+
uniform float u_kernel49Weight;
|
133
|
+
uniform float u_kernel81[81];
|
134
|
+
uniform float u_kernel81Weight;
|
135
|
+
|
136
|
+
in vec2 v_texCoord;
|
137
|
+
|
138
|
+
out vec4 outColor;
|
139
|
+
|
140
|
+
float random (vec2 st) {
|
141
|
+
return fract(sin(dot(st.xy, vec2(12.9898,78.233)))* 43758.5453123);
|
142
|
+
}
|
143
|
+
|
144
|
+
//
|
145
|
+
vec3 rgb2hsv(vec3 c)
|
146
|
+
{
|
147
|
+
vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);
|
148
|
+
vec4 p = c.g < c.b ? vec4(c.bg, K.wz) : vec4(c.gb, K.xy);
|
149
|
+
vec4 q = c.r < p.x ? vec4(p.xyw, c.r) : vec4(c.r, p.yzx);
|
150
|
+
|
151
|
+
float d = q.x - min(q.w, q.y);
|
152
|
+
float e = 1.0e-10;
|
153
|
+
return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);
|
154
|
+
}
|
155
|
+
|
156
|
+
vec3 hsv2rgb(vec3 c)
|
157
|
+
{
|
158
|
+
vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
|
159
|
+
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
|
160
|
+
return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y);
|
161
|
+
}
|
162
|
+
|
163
|
+
void main() {
|
164
|
+
vec4 pixelColor = texture(u_image, v_texCoord);
|
165
|
+
vec2 onePixel = vec2(1) / vec2(textureSize(u_image, 0));
|
166
|
+
|
167
|
+
${filterContent}
|
168
|
+
|
169
|
+
${convolutionString}
|
170
|
+
|
171
|
+
}`
|
172
|
+
}
|
173
|
+
|
174
|
+
export function colorToVec4(color) {
|
175
|
+
color = [ color.r/255, color.g/255, color.b/255, color.a || 0].map(toFloatString)
|
176
|
+
return 'vec4(' + color + ')'
|
177
|
+
}
|
178
|
+
|
179
|
+
export function toFloatString(number) {
|
180
|
+
if (number == Math.floor(number)) {
|
181
|
+
return number + '.0';
|
182
|
+
}
|
183
|
+
|
184
|
+
return number;
|
185
|
+
}
|
@@ -0,0 +1,158 @@
|
|
1
|
+
import { matches } from '../filter/functions'
|
2
|
+
import filters from './filter/index'
|
3
|
+
import GL from './index'
|
4
|
+
|
5
|
+
const functions = {
|
6
|
+
filter
|
7
|
+
}
|
8
|
+
export function makeGroupedFilter(filters = []) {
|
9
|
+
var groupedFilter = []
|
10
|
+
var group = []
|
11
|
+
for (var i = 0, len = filters.length; i < len; i++) {
|
12
|
+
var f = filters[i]
|
13
|
+
|
14
|
+
if (f.userShader) {
|
15
|
+
group.push(f)
|
16
|
+
} else {
|
17
|
+
if (group.length) {
|
18
|
+
groupedFilter.push([...group])
|
19
|
+
}
|
20
|
+
groupedFilter.push(f)
|
21
|
+
group = []
|
22
|
+
}
|
23
|
+
}
|
24
|
+
|
25
|
+
if (group.length) {
|
26
|
+
groupedFilter.push([...group])
|
27
|
+
}
|
28
|
+
|
29
|
+
groupedFilter.forEach((filter, index) => {
|
30
|
+
if (Array.isArray(filter)) {
|
31
|
+
groupedFilter[index] = (function () {
|
32
|
+
const userFunction = makePrebuildUserFilterListForGL(filter)
|
33
|
+
// console.log(userFunction)
|
34
|
+
return function (bitmap, done) {
|
35
|
+
for (var i = 0, len = bitmap.pixels.length; i< len;i += 4) {
|
36
|
+
userFunction(bitmap.pixels, i)
|
37
|
+
}
|
38
|
+
|
39
|
+
done(bitmap)
|
40
|
+
}
|
41
|
+
})()
|
42
|
+
}
|
43
|
+
})
|
44
|
+
|
45
|
+
return groupedFilter
|
46
|
+
}
|
47
|
+
|
48
|
+
|
49
|
+
|
50
|
+
export function multi (...filters) {
|
51
|
+
filters = filters.map(filter => {
|
52
|
+
return makeFilter(filter);
|
53
|
+
}).filter(f => f)
|
54
|
+
|
55
|
+
filters = makeGroupedFilter(filters)
|
56
|
+
|
57
|
+
var max = filters.length
|
58
|
+
|
59
|
+
return function (bitmap, done, opt = {}) {
|
60
|
+
|
61
|
+
var currentBitmap = bitmap
|
62
|
+
var index = 0
|
63
|
+
|
64
|
+
function runFilter () {
|
65
|
+
filters[index].call(null, currentBitmap, function (nextBitmap) {
|
66
|
+
currentBitmap = nextBitmap
|
67
|
+
|
68
|
+
nextFilter()
|
69
|
+
}, opt)
|
70
|
+
}
|
71
|
+
|
72
|
+
function nextFilter () {
|
73
|
+
index++
|
74
|
+
|
75
|
+
if (index >= max) {
|
76
|
+
done(currentBitmap)
|
77
|
+
return;
|
78
|
+
}
|
79
|
+
|
80
|
+
runFilter()
|
81
|
+
}
|
82
|
+
|
83
|
+
runFilter()
|
84
|
+
}
|
85
|
+
}
|
86
|
+
|
87
|
+
export function merge (arr) {
|
88
|
+
return multi(...arr)
|
89
|
+
}
|
90
|
+
|
91
|
+
export function makeFilterFunction (filterObj) {
|
92
|
+
const filterName = filterObj.arr[0]
|
93
|
+
var f = filters[filterName]
|
94
|
+
|
95
|
+
let arr = filterObj.arr
|
96
|
+
arr.shift()
|
97
|
+
|
98
|
+
var result = f.apply(this, arr)
|
99
|
+
|
100
|
+
return result
|
101
|
+
}
|
102
|
+
|
103
|
+
/**
|
104
|
+
* 겹쳐져 있는 Filter 함수를 1차원으로 나열한다.
|
105
|
+
* ex) ['sobel'] => ['sobel-horizontal', 'sobel-vertial']
|
106
|
+
*
|
107
|
+
* @param {String|Array} filterString
|
108
|
+
*/
|
109
|
+
export function flatFilter (filterString) {
|
110
|
+
|
111
|
+
let filter_list = []
|
112
|
+
|
113
|
+
if (typeof filterString == 'string') {
|
114
|
+
filter_list = matches(filterString)
|
115
|
+
} else if (Array.isArray(filterString)) {
|
116
|
+
filter_list = filterString;
|
117
|
+
}
|
118
|
+
|
119
|
+
let allFilter = []
|
120
|
+
|
121
|
+
filter_list.forEach(filterObj => {
|
122
|
+
const filterName = filterObj.arr[0]
|
123
|
+
|
124
|
+
if (filters[filterName]) {
|
125
|
+
const f = makeFilterFunction(filterObj);
|
126
|
+
|
127
|
+
if (f.type == 'convolution' || f.type == 'shader') {
|
128
|
+
allFilter.push(f)
|
129
|
+
} else {
|
130
|
+
f.forEach(subFilter => {
|
131
|
+
allFilter = allFilter.concat(flatFilter(subFilter))
|
132
|
+
})
|
133
|
+
}
|
134
|
+
}
|
135
|
+
})
|
136
|
+
|
137
|
+
// console.log(filter_list, allFilter)
|
138
|
+
|
139
|
+
return allFilter
|
140
|
+
}
|
141
|
+
|
142
|
+
export function filter (img, filterString, callback, opt) {
|
143
|
+
|
144
|
+
const canvas = new GL.GLCanvas({
|
145
|
+
width: opt.width || img.width,
|
146
|
+
height: opt.height || img.height,
|
147
|
+
img
|
148
|
+
});
|
149
|
+
|
150
|
+
canvas.filter(flatFilter(filterString), function done () {
|
151
|
+
if (typeof callback == 'function') {
|
152
|
+
callback(canvas)
|
153
|
+
}
|
154
|
+
})
|
155
|
+
}
|
156
|
+
|
157
|
+
|
158
|
+
export default functions
|