pixel-data-js 0.5.3 → 0.9.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/dist/index.dev.cjs +831 -263
- package/dist/index.dev.cjs.map +1 -1
- package/dist/index.dev.js +775 -237
- package/dist/index.dev.js.map +1 -1
- package/dist/index.prod.cjs +831 -263
- package/dist/index.prod.cjs.map +1 -1
- package/dist/index.prod.d.ts +165 -100
- package/dist/index.prod.js +775 -237
- package/dist/index.prod.js.map +1 -1
- package/package.json +5 -2
- package/src/{blend-modes.ts → BlendModes/blend-modes-fast.ts} +215 -217
- package/src/BlendModes/blend-modes-perfect.ts +651 -0
- package/src/BlendModes/blend-modes.ts +31 -0
- package/src/IndexedImage/IndexedImage.ts +29 -44
- package/src/IndexedImage/indexedImageToAverageColor.ts +7 -6
- package/src/PixelData/PixelData.ts +15 -4
- package/src/PixelData/blendColorPixelData.ts +3 -2
- package/src/PixelData/blendPixelData.ts +3 -2
- package/src/PixelData/reflectPixelData.ts +42 -0
- package/src/PixelData/rotatePixelData.ts +56 -0
- package/src/_types.ts +3 -3
- package/src/index.ts +5 -1
package/dist/index.dev.cjs
CHANGED
|
@@ -21,10 +21,17 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
21
21
|
var src_exports = {};
|
|
22
22
|
__export(src_exports, {
|
|
23
23
|
BlendMode: () => BlendMode,
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
FAST_BLENDER_REGISTRY: () => FAST_BLENDER_REGISTRY,
|
|
25
|
+
FAST_BLEND_MODES: () => FAST_BLEND_MODES,
|
|
26
|
+
FAST_BLEND_MODE_BY_NAME: () => FAST_BLEND_MODE_BY_NAME,
|
|
27
|
+
FAST_BLEND_TO_INDEX: () => FAST_BLEND_TO_INDEX,
|
|
28
|
+
INDEX_TO_FAST_BLEND: () => INDEX_TO_FAST_BLEND,
|
|
29
|
+
INDEX_TO_PERFECT_BLEND: () => INDEX_TO_PERFECT_BLEND,
|
|
27
30
|
MaskType: () => MaskType,
|
|
31
|
+
PERFECT_BLENDER_REGISTRY: () => PERFECT_BLENDER_REGISTRY,
|
|
32
|
+
PERFECT_BLEND_MODES: () => PERFECT_BLEND_MODES,
|
|
33
|
+
PERFECT_BLEND_MODE_BY_NAME: () => PERFECT_BLEND_MODE_BY_NAME,
|
|
34
|
+
PERFECT_BLEND_TO_INDEX: () => PERFECT_BLEND_TO_INDEX,
|
|
28
35
|
PixelData: () => PixelData,
|
|
29
36
|
UnsupportedFormatError: () => UnsupportedFormatError,
|
|
30
37
|
applyMaskToPixelData: () => applyMaskToPixelData,
|
|
@@ -35,20 +42,27 @@ __export(src_exports, {
|
|
|
35
42
|
clearPixelData: () => clearPixelData,
|
|
36
43
|
color32ToCssRGBA: () => color32ToCssRGBA,
|
|
37
44
|
color32ToHex: () => color32ToHex,
|
|
38
|
-
|
|
45
|
+
colorBurnFast: () => colorBurnFast,
|
|
46
|
+
colorBurnPerfect: () => colorBurnPerfect,
|
|
39
47
|
colorDistance: () => colorDistance,
|
|
40
|
-
|
|
48
|
+
colorDodgeFast: () => colorDodgeFast,
|
|
49
|
+
colorDodgePerfect: () => colorDodgePerfect,
|
|
41
50
|
copyImageData: () => copyImageData,
|
|
42
51
|
copyImageDataLike: () => copyImageDataLike,
|
|
43
52
|
copyMask: () => copyMask,
|
|
44
|
-
|
|
45
|
-
|
|
53
|
+
darkenFast: () => darkenFast,
|
|
54
|
+
darkenPerfect: () => darkenPerfect,
|
|
55
|
+
darkerFast: () => darkerFast,
|
|
56
|
+
darkerPerfect: () => darkerPerfect,
|
|
46
57
|
deserializeImageData: () => deserializeImageData,
|
|
47
58
|
deserializeNullableImageData: () => deserializeNullableImageData,
|
|
48
59
|
deserializeRawImageData: () => deserializeRawImageData,
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
60
|
+
differenceFast: () => differenceFast,
|
|
61
|
+
differencePerfect: () => differencePerfect,
|
|
62
|
+
divideFast: () => divideFast,
|
|
63
|
+
dividePerfect: () => dividePerfect,
|
|
64
|
+
exclusionFast: () => exclusionFast,
|
|
65
|
+
exclusionPerfect: () => exclusionPerfect,
|
|
52
66
|
extractImageDataPixels: () => extractImageDataPixels,
|
|
53
67
|
extractMask: () => extractMask,
|
|
54
68
|
fileInputChangeToImageData: () => fileInputChangeToImageData,
|
|
@@ -57,8 +71,10 @@ __export(src_exports, {
|
|
|
57
71
|
floodFillSelection: () => floodFillSelection,
|
|
58
72
|
getImageDataFromClipboard: () => getImageDataFromClipboard,
|
|
59
73
|
getSupportedPixelFormats: () => getSupportedPixelFormats,
|
|
60
|
-
|
|
61
|
-
|
|
74
|
+
hardLightFast: () => hardLightFast,
|
|
75
|
+
hardLightPerfect: () => hardLightPerfect,
|
|
76
|
+
hardMixFast: () => hardMixFast,
|
|
77
|
+
hardMixPerfect: () => hardMixPerfect,
|
|
62
78
|
imageDataToAlphaMask: () => imageDataToAlphaMask,
|
|
63
79
|
imageDataToDataUrl: () => imageDataToDataUrl,
|
|
64
80
|
imageDataToImgBlob: () => imageDataToImgBlob,
|
|
@@ -70,29 +86,42 @@ __export(src_exports, {
|
|
|
70
86
|
invertPixelData: () => invertPixelData,
|
|
71
87
|
lerpColor32: () => lerpColor32,
|
|
72
88
|
lerpColor32Fast: () => lerpColor32Fast,
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
89
|
+
lightenFast: () => lightenFast,
|
|
90
|
+
lightenPerfect: () => lightenPerfect,
|
|
91
|
+
lighterFast: () => lighterFast,
|
|
92
|
+
lighterPerfect: () => lighterPerfect,
|
|
93
|
+
linearBurnFast: () => linearBurnFast,
|
|
94
|
+
linearBurnPerfect: () => linearBurnPerfect,
|
|
95
|
+
linearDodgeFast: () => linearDodgeFast,
|
|
96
|
+
linearDodgePerfect: () => linearDodgePerfect,
|
|
97
|
+
linearLightFast: () => linearLightFast,
|
|
98
|
+
linearLightPerfect: () => linearLightPerfect,
|
|
78
99
|
makeIndexedImage: () => makeIndexedImage,
|
|
79
100
|
makePixelCanvas: () => makePixelCanvas,
|
|
80
101
|
makeReusableCanvas: () => makeReusableCanvas,
|
|
81
102
|
mergeMasks: () => mergeMasks,
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
103
|
+
multiplyFast: () => multiplyFast,
|
|
104
|
+
multiplyPerfect: () => multiplyPerfect,
|
|
105
|
+
overlayFast: () => overlayFast,
|
|
106
|
+
overlayPerfect: () => overlayPerfect,
|
|
107
|
+
overwriteFast: () => overwriteFast,
|
|
108
|
+
overwritePerfect: () => overwritePerfect,
|
|
85
109
|
packColor: () => packColor,
|
|
86
110
|
packRGBA: () => packRGBA,
|
|
87
|
-
|
|
111
|
+
pinLightFast: () => pinLightFast,
|
|
112
|
+
pinLightPerfect: () => pinLightPerfect,
|
|
88
113
|
pixelDataToAlphaMask: () => pixelDataToAlphaMask,
|
|
89
114
|
resizeImageData: () => resizeImageData,
|
|
90
|
-
|
|
115
|
+
screenFast: () => screenFast,
|
|
116
|
+
screenPerfect: () => screenPerfect,
|
|
91
117
|
serializeImageData: () => serializeImageData,
|
|
92
118
|
serializeNullableImageData: () => serializeNullableImageData,
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
119
|
+
softLightFast: () => softLightFast,
|
|
120
|
+
softLightPerfect: () => softLightPerfect,
|
|
121
|
+
sourceOverFast: () => sourceOverFast,
|
|
122
|
+
sourceOverPerfect: () => sourceOverPerfect,
|
|
123
|
+
subtractFast: () => subtractFast,
|
|
124
|
+
subtractPerfect: () => subtractPerfect,
|
|
96
125
|
trimRectBounds: () => trimRectBounds,
|
|
97
126
|
unpackAlpha: () => unpackAlpha,
|
|
98
127
|
unpackBlue: () => unpackBlue,
|
|
@@ -100,41 +129,67 @@ __export(src_exports, {
|
|
|
100
129
|
unpackColorTo: () => unpackColorTo,
|
|
101
130
|
unpackGreen: () => unpackGreen,
|
|
102
131
|
unpackRed: () => unpackRed,
|
|
103
|
-
|
|
132
|
+
vividLightFast: () => vividLightFast,
|
|
133
|
+
vividLightPerfect: () => vividLightPerfect,
|
|
104
134
|
writeImageDataPixels: () => writeImageDataPixels,
|
|
105
135
|
writeImageDataToClipboard: () => writeImageDataToClipboard,
|
|
106
136
|
writeImgBlobToClipboard: () => writeImgBlobToClipboard
|
|
107
137
|
});
|
|
108
138
|
module.exports = __toCommonJS(src_exports);
|
|
109
139
|
|
|
110
|
-
// src/blend-modes.ts
|
|
111
|
-
var
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
140
|
+
// src/BlendModes/blend-modes.ts
|
|
141
|
+
var BlendMode = /* @__PURE__ */ ((BlendMode2) => {
|
|
142
|
+
BlendMode2[BlendMode2["overwrite"] = 0] = "overwrite";
|
|
143
|
+
BlendMode2[BlendMode2["sourceOver"] = 1] = "sourceOver";
|
|
144
|
+
BlendMode2[BlendMode2["darken"] = 2] = "darken";
|
|
145
|
+
BlendMode2[BlendMode2["multiply"] = 3] = "multiply";
|
|
146
|
+
BlendMode2[BlendMode2["colorBurn"] = 4] = "colorBurn";
|
|
147
|
+
BlendMode2[BlendMode2["linearBurn"] = 5] = "linearBurn";
|
|
148
|
+
BlendMode2[BlendMode2["darkerColor"] = 6] = "darkerColor";
|
|
149
|
+
BlendMode2[BlendMode2["lighten"] = 7] = "lighten";
|
|
150
|
+
BlendMode2[BlendMode2["screen"] = 8] = "screen";
|
|
151
|
+
BlendMode2[BlendMode2["colorDodge"] = 9] = "colorDodge";
|
|
152
|
+
BlendMode2[BlendMode2["linearDodge"] = 10] = "linearDodge";
|
|
153
|
+
BlendMode2[BlendMode2["lighterColor"] = 11] = "lighterColor";
|
|
154
|
+
BlendMode2[BlendMode2["overlay"] = 12] = "overlay";
|
|
155
|
+
BlendMode2[BlendMode2["softLight"] = 13] = "softLight";
|
|
156
|
+
BlendMode2[BlendMode2["hardLight"] = 14] = "hardLight";
|
|
157
|
+
BlendMode2[BlendMode2["vividLight"] = 15] = "vividLight";
|
|
158
|
+
BlendMode2[BlendMode2["linearLight"] = 16] = "linearLight";
|
|
159
|
+
BlendMode2[BlendMode2["pinLight"] = 17] = "pinLight";
|
|
160
|
+
BlendMode2[BlendMode2["hardMix"] = 18] = "hardMix";
|
|
161
|
+
BlendMode2[BlendMode2["difference"] = 19] = "difference";
|
|
162
|
+
BlendMode2[BlendMode2["exclusion"] = 20] = "exclusion";
|
|
163
|
+
BlendMode2[BlendMode2["subtract"] = 21] = "subtract";
|
|
164
|
+
BlendMode2[BlendMode2["divide"] = 22] = "divide";
|
|
165
|
+
return BlendMode2;
|
|
166
|
+
})(BlendMode || {});
|
|
167
|
+
|
|
168
|
+
// src/BlendModes/blend-modes-fast.ts
|
|
169
|
+
var overwriteFast = (src, _dst) => src;
|
|
170
|
+
var sourceOverFast = (src, dst) => {
|
|
171
|
+
const sa = src >>> 24 & 255;
|
|
172
|
+
if (sa === 255) return src;
|
|
173
|
+
if (sa === 0) return dst;
|
|
174
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
175
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
176
|
+
const da = dst >>> 24 & 255;
|
|
177
|
+
const invA = 255 - sa;
|
|
178
|
+
const r = sr * sa + dr * invA >> 8;
|
|
179
|
+
const g = sg * sa + dg * invA >> 8;
|
|
180
|
+
const b = sb * sa + db * invA >> 8;
|
|
181
|
+
const a = 255 * sa + da * invA >> 8;
|
|
182
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
127
183
|
};
|
|
128
|
-
var
|
|
184
|
+
var darkenFast = (src, dst) => {
|
|
129
185
|
const sa = src >>> 24 & 255;
|
|
130
186
|
if (sa === 0) return dst;
|
|
131
|
-
const
|
|
132
|
-
const
|
|
133
|
-
const
|
|
187
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
188
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
189
|
+
const br = sr < dr ? sr : dr;
|
|
190
|
+
const bg = sg < dg ? sg : dg;
|
|
191
|
+
const bb = sb < db ? sb : db;
|
|
134
192
|
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
135
|
-
const dr = dst & 255;
|
|
136
|
-
const dg = dst >> 8 & 255;
|
|
137
|
-
const db = dst >> 16 & 255;
|
|
138
193
|
const invA = 255 - sa;
|
|
139
194
|
const r = br * sa + dr * invA >> 8;
|
|
140
195
|
const g = bg * sa + dg * invA >> 8;
|
|
@@ -142,45 +197,51 @@ var darkenColor32 = (src, dst) => {
|
|
|
142
197
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
143
198
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
144
199
|
};
|
|
145
|
-
var
|
|
200
|
+
var multiplyFast = (src, dst) => {
|
|
146
201
|
const sa = src >>> 24 & 255;
|
|
147
202
|
if (sa === 0) return dst;
|
|
148
|
-
const
|
|
149
|
-
const
|
|
150
|
-
const
|
|
151
|
-
const
|
|
203
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
204
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
205
|
+
const br = sr * dr >> 8;
|
|
206
|
+
const bg = sg * dg >> 8;
|
|
207
|
+
const bb = sb * db >> 8;
|
|
152
208
|
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
153
209
|
const invA = 255 - sa;
|
|
210
|
+
const da = dst >>> 24 & 255;
|
|
154
211
|
const r = br * sa + dr * invA >> 8;
|
|
155
212
|
const g = bg * sa + dg * invA >> 8;
|
|
156
213
|
const b = bb * sa + db * invA >> 8;
|
|
157
|
-
const a = 255 * sa +
|
|
214
|
+
const a = 255 * sa + da * invA >> 8;
|
|
158
215
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
159
216
|
};
|
|
160
|
-
var
|
|
217
|
+
var colorBurnFast = (src, dst) => {
|
|
161
218
|
const sa = src >>> 24 & 255;
|
|
162
219
|
if (sa === 0) return dst;
|
|
163
|
-
const sr = src & 255, sg = src
|
|
164
|
-
const dr = dst & 255, dg = dst
|
|
165
|
-
const br = dr === 255 ? 255 : Math.max(0, 255 - (255 - dr << 8) /
|
|
166
|
-
const bg = dg === 255 ? 255 : Math.max(0, 255 - (255 - dg << 8) /
|
|
167
|
-
const bb = db === 255 ? 255 : Math.max(0, 255 - (255 - db << 8) /
|
|
220
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
221
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
222
|
+
const br = dr === 255 ? 255 : sr === 0 ? 0 : Math.max(0, 255 - (255 - dr << 8) / sr | 0);
|
|
223
|
+
const bg = dg === 255 ? 255 : sg === 0 ? 0 : Math.max(0, 255 - (255 - dg << 8) / sg | 0);
|
|
224
|
+
const bb = db === 255 ? 255 : sb === 0 ? 0 : Math.max(0, 255 - (255 - db << 8) / sb | 0);
|
|
168
225
|
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
169
226
|
const invA = 255 - sa;
|
|
227
|
+
const da = dst >>> 24 & 255;
|
|
170
228
|
const r = br * sa + dr * invA >> 8;
|
|
171
229
|
const g = bg * sa + dg * invA >> 8;
|
|
172
230
|
const b = bb * sa + db * invA >> 8;
|
|
173
|
-
const a = 255 * sa +
|
|
231
|
+
const a = 255 * sa + da * invA >> 8;
|
|
174
232
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
175
233
|
};
|
|
176
|
-
var
|
|
234
|
+
var linearBurnFast = (src, dst) => {
|
|
177
235
|
const sa = src >>> 24 & 255;
|
|
178
236
|
if (sa === 0) return dst;
|
|
179
|
-
const dr = dst & 255, dg = dst
|
|
180
|
-
const sr = src & 255, sg = src
|
|
181
|
-
const
|
|
182
|
-
const
|
|
183
|
-
const
|
|
237
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
238
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
239
|
+
const brU = dr + sr - 255;
|
|
240
|
+
const bgU = dg + sg - 255;
|
|
241
|
+
const bbU = db + sb - 255;
|
|
242
|
+
const br = brU < 0 ? 0 : brU;
|
|
243
|
+
const bg = bgU < 0 ? 0 : bgU;
|
|
244
|
+
const bb = bbU < 0 ? 0 : bbU;
|
|
184
245
|
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
185
246
|
const invA = 255 - sa;
|
|
186
247
|
const r = br * sa + dr * invA >> 8;
|
|
@@ -189,11 +250,11 @@ var linearBurnColor32 = (src, dst) => {
|
|
|
189
250
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
190
251
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
191
252
|
};
|
|
192
|
-
var
|
|
253
|
+
var darkerFast = (src, dst) => {
|
|
193
254
|
const sa = src >>> 24 & 255;
|
|
194
255
|
if (sa === 0) return dst;
|
|
195
|
-
const dr = dst & 255, dg = dst
|
|
196
|
-
const sr = src & 255, sg = src
|
|
256
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
257
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
197
258
|
const lumSrc = sr * 77 + sg * 151 + sb * 28;
|
|
198
259
|
const lumDst = dr * 77 + dg * 151 + db * 28;
|
|
199
260
|
let br, bg, bb;
|
|
@@ -214,7 +275,7 @@ var darkerColor32 = (src, dst) => {
|
|
|
214
275
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
215
276
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
216
277
|
};
|
|
217
|
-
var
|
|
278
|
+
var lightenFast = (src, dst) => {
|
|
218
279
|
const sa = src >>> 24 & 255;
|
|
219
280
|
if (sa === 0) return dst;
|
|
220
281
|
const br = Math.max(src & 255, dst & 255);
|
|
@@ -231,13 +292,13 @@ var lightenColor32 = (src, dst) => {
|
|
|
231
292
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
232
293
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
233
294
|
};
|
|
234
|
-
var
|
|
295
|
+
var screenFast = (src, dst) => {
|
|
235
296
|
const sa = src >>> 24 & 255;
|
|
236
297
|
if (sa === 0) return dst;
|
|
237
|
-
const dr = dst & 255, dg = dst
|
|
298
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
238
299
|
const br = 255 - ((255 - (src & 255)) * (255 - dr) >> 8);
|
|
239
|
-
const bg = 255 - ((255 - (src
|
|
240
|
-
const bb = 255 - ((255 - (src
|
|
300
|
+
const bg = 255 - ((255 - (src >>> 8 & 255)) * (255 - dg) >> 8);
|
|
301
|
+
const bb = 255 - ((255 - (src >>> 16 & 255)) * (255 - db) >> 8);
|
|
241
302
|
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
242
303
|
const invA = 255 - sa;
|
|
243
304
|
const r = br * sa + dr * invA >> 8;
|
|
@@ -246,14 +307,14 @@ var screenColor32 = (src, dst) => {
|
|
|
246
307
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
247
308
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
248
309
|
};
|
|
249
|
-
var
|
|
310
|
+
var colorDodgeFast = (src, dst) => {
|
|
250
311
|
const sa = src >>> 24 & 255;
|
|
251
312
|
if (sa === 0) return dst;
|
|
252
|
-
const dr = dst & 255, dg = dst
|
|
253
|
-
const sr = src & 255, sg = src
|
|
254
|
-
const br = sr === 255 ? 255 : Math.min(255, (dr << 8) / (255 - sr));
|
|
255
|
-
const bg = sg === 255 ? 255 : Math.min(255, (dg << 8) / (255 - sg));
|
|
256
|
-
const bb = sb === 255 ? 255 : Math.min(255, (db << 8) / (255 - sb));
|
|
313
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
314
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
315
|
+
const br = sr === 255 ? 255 : Math.min(255, (dr << 8) / (255 - sr) | 0);
|
|
316
|
+
const bg = sg === 255 ? 255 : Math.min(255, (dg << 8) / (255 - sg) | 0);
|
|
317
|
+
const bb = sb === 255 ? 255 : Math.min(255, (db << 8) / (255 - sb) | 0);
|
|
257
318
|
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
258
319
|
const invA = 255 - sa;
|
|
259
320
|
const r = br * sa + dr * invA >> 8;
|
|
@@ -262,13 +323,16 @@ var colorDodgeColor32 = (src, dst) => {
|
|
|
262
323
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
263
324
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
264
325
|
};
|
|
265
|
-
var
|
|
326
|
+
var linearDodgeFast = (src, dst) => {
|
|
266
327
|
const sa = src >>> 24 & 255;
|
|
267
328
|
if (sa === 0) return dst;
|
|
268
|
-
const dr = dst & 255, dg = dst
|
|
269
|
-
const
|
|
270
|
-
const
|
|
271
|
-
const
|
|
329
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
330
|
+
const brU = (src & 255) + dr;
|
|
331
|
+
const bgU = (src >>> 8 & 255) + dg;
|
|
332
|
+
const bbU = (src >>> 16 & 255) + db;
|
|
333
|
+
const br = brU > 255 ? 255 : brU;
|
|
334
|
+
const bg = bgU > 255 ? 255 : bgU;
|
|
335
|
+
const bb = bbU > 255 ? 255 : bbU;
|
|
272
336
|
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
273
337
|
const invA = 255 - sa;
|
|
274
338
|
const r = br * sa + dr * invA >> 8;
|
|
@@ -277,11 +341,11 @@ var linearDodgeColor32 = (src, dst) => {
|
|
|
277
341
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
278
342
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
279
343
|
};
|
|
280
|
-
var
|
|
344
|
+
var lighterFast = (src, dst) => {
|
|
281
345
|
const sa = src >>> 24 & 255;
|
|
282
346
|
if (sa === 0) return dst;
|
|
283
|
-
const dr = dst & 255, dg = dst
|
|
284
|
-
const sr = src & 255, sg = src
|
|
347
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
348
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
285
349
|
const lumSrc = sr * 77 + sg * 151 + sb * 28;
|
|
286
350
|
const lumDst = dr * 77 + dg * 151 + db * 28;
|
|
287
351
|
let br, bg, bb;
|
|
@@ -302,11 +366,11 @@ var lighterColor32 = (src, dst) => {
|
|
|
302
366
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
303
367
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
304
368
|
};
|
|
305
|
-
var
|
|
369
|
+
var overlayFast = (src, dst) => {
|
|
306
370
|
const sa = src >>> 24 & 255;
|
|
307
371
|
if (sa === 0) return dst;
|
|
308
|
-
const sr = src & 255, sg = src
|
|
309
|
-
const dr = dst & 255, dg = dst
|
|
372
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
373
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
310
374
|
const br = dr < 128 ? 2 * sr * dr >> 8 : 255 - (2 * (255 - sr) * (255 - dr) >> 8);
|
|
311
375
|
const bg = dg < 128 ? 2 * sg * dg >> 8 : 255 - (2 * (255 - sg) * (255 - dg) >> 8);
|
|
312
376
|
const bb = db < 128 ? 2 * sb * db >> 8 : 255 - (2 * (255 - sb) * (255 - db) >> 8);
|
|
@@ -318,11 +382,11 @@ var overlayColor32 = (src, dst) => {
|
|
|
318
382
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
319
383
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
320
384
|
};
|
|
321
|
-
var
|
|
385
|
+
var softLightFast = (src, dst) => {
|
|
322
386
|
const sa = src >>> 24 & 255;
|
|
323
387
|
if (sa === 0) return dst;
|
|
324
|
-
const dr = dst & 255, dg = dst
|
|
325
|
-
const sr = src & 255, sg = src
|
|
388
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
389
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
326
390
|
const br = (255 - dr) * (sr * dr >> 8) + dr * (255 - ((255 - sr) * (255 - dr) >> 8)) >> 8;
|
|
327
391
|
const bg = (255 - dg) * (sg * dg >> 8) + dg * (255 - ((255 - sg) * (255 - dg) >> 8)) >> 8;
|
|
328
392
|
const bb = (255 - db) * (sb * db >> 8) + db * (255 - ((255 - sb) * (255 - db) >> 8)) >> 8;
|
|
@@ -334,11 +398,11 @@ var softLightColor32 = (src, dst) => {
|
|
|
334
398
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
335
399
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
336
400
|
};
|
|
337
|
-
var
|
|
401
|
+
var hardLightFast = (src, dst) => {
|
|
338
402
|
const sa = src >>> 24 & 255;
|
|
339
403
|
if (sa === 0) return dst;
|
|
340
|
-
const dr = dst & 255, dg = dst
|
|
341
|
-
const sr = src & 255, sg = src
|
|
404
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
405
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
342
406
|
const br = sr < 128 ? 2 * sr * dr >> 8 : 255 - (2 * (255 - sr) * (255 - dr) >> 8);
|
|
343
407
|
const bg = sg < 128 ? 2 * sg * dg >> 8 : 255 - (2 * (255 - sg) * (255 - dg) >> 8);
|
|
344
408
|
const bb = sb < 128 ? 2 * sb * db >> 8 : 255 - (2 * (255 - sb) * (255 - db) >> 8);
|
|
@@ -350,14 +414,14 @@ var hardLightColor32 = (src, dst) => {
|
|
|
350
414
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
351
415
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
352
416
|
};
|
|
353
|
-
var
|
|
417
|
+
var vividLightFast = (src, dst) => {
|
|
354
418
|
const sa = src >>> 24 & 255;
|
|
355
419
|
if (sa === 0) return dst;
|
|
356
|
-
const dr = dst & 255, dg = dst
|
|
357
|
-
const sr = src & 255, sg = src
|
|
358
|
-
const br = sr < 128 ? sr === 0 ? 0 : Math.max(0, 255 - (255 - dr << 8) / (2 * sr)) : sr === 255 ? 255 : Math.min(255, (dr << 8) / (2 * (255 - sr)));
|
|
359
|
-
const bg = sg < 128 ? sg === 0 ? 0 : Math.max(0, 255 - (255 - dg << 8) / (2 * sg)) : sg === 255 ? 255 : Math.min(255, (dg << 8) / (2 * (255 - sg)));
|
|
360
|
-
const bb = sb < 128 ? sb === 0 ? 0 : Math.max(0, 255 - (255 - db << 8) / (2 * sb)) : sb === 255 ? 255 : Math.min(255, (db << 8) / (2 * (255 - sb)));
|
|
420
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
421
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
422
|
+
const br = sr < 128 ? sr === 0 ? 0 : Math.max(0, 255 - (255 - dr << 8) / (2 * sr) | 0) : sr === 255 ? 255 : Math.min(255, (dr << 8) / (2 * (255 - sr)) | 0);
|
|
423
|
+
const bg = sg < 128 ? sg === 0 ? 0 : Math.max(0, 255 - (255 - dg << 8) / (2 * sg) | 0) : sg === 255 ? 255 : Math.min(255, (dg << 8) / (2 * (255 - sg)) | 0);
|
|
424
|
+
const bb = sb < 128 ? sb === 0 ? 0 : Math.max(0, 255 - (255 - db << 8) / (2 * sb) | 0) : sb === 255 ? 255 : Math.min(255, (db << 8) / (2 * (255 - sb)) | 0);
|
|
361
425
|
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
362
426
|
const invA = 255 - sa;
|
|
363
427
|
const r = br * sa + dr * invA >> 8;
|
|
@@ -366,14 +430,17 @@ var vividLightColor32 = (src, dst) => {
|
|
|
366
430
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
367
431
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
368
432
|
};
|
|
369
|
-
var
|
|
433
|
+
var linearLightFast = (src, dst) => {
|
|
370
434
|
const sa = src >>> 24 & 255;
|
|
371
435
|
if (sa === 0) return dst;
|
|
372
|
-
const dr = dst & 255, dg = dst
|
|
373
|
-
const sr = src & 255, sg = src
|
|
374
|
-
const
|
|
375
|
-
const
|
|
376
|
-
const
|
|
436
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
437
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
438
|
+
const brU = dr + 2 * sr - 255;
|
|
439
|
+
const bgU = dg + 2 * sg - 255;
|
|
440
|
+
const bbU = db + 2 * sb - 255;
|
|
441
|
+
const br = brU < 0 ? 0 : brU > 255 ? 255 : brU;
|
|
442
|
+
const bg = bgU < 0 ? 0 : bgU > 255 ? 255 : bgU;
|
|
443
|
+
const bb = bbU < 0 ? 0 : bbU > 255 ? 255 : bbU;
|
|
377
444
|
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
378
445
|
const invA = 255 - sa;
|
|
379
446
|
const r = br * sa + dr * invA >> 8;
|
|
@@ -382,14 +449,14 @@ var linearLightColor32 = (src, dst) => {
|
|
|
382
449
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
383
450
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
384
451
|
};
|
|
385
|
-
var
|
|
452
|
+
var pinLightFast = (src, dst) => {
|
|
386
453
|
const sa = src >>> 24 & 255;
|
|
387
454
|
if (sa === 0) return dst;
|
|
388
|
-
const dr = dst & 255, dg = dst
|
|
389
|
-
const sr = src & 255, sg = src
|
|
390
|
-
const br = sr < 128 ?
|
|
391
|
-
const bg = sg < 128 ?
|
|
392
|
-
const bb = sb < 128 ?
|
|
455
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
456
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
457
|
+
const br = sr < 128 ? dr < 2 * sr ? dr : 2 * sr : dr > 2 * sr - 256 ? dr : 2 * sr - 256;
|
|
458
|
+
const bg = sg < 128 ? dg < 2 * sg ? dg : 2 * sg : dg > 2 * sg - 256 ? dg : 2 * sg - 256;
|
|
459
|
+
const bb = sb < 128 ? db < 2 * sb ? db : 2 * sb : db > 2 * sb - 256 ? db : 2 * sb - 256;
|
|
393
460
|
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
394
461
|
const invA = 255 - sa;
|
|
395
462
|
const r = br * sa + dr * invA >> 8;
|
|
@@ -398,14 +465,14 @@ var pinLightColor32 = (src, dst) => {
|
|
|
398
465
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
399
466
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
400
467
|
};
|
|
401
|
-
var
|
|
468
|
+
var hardMixFast = (src, dst) => {
|
|
402
469
|
const sa = src >>> 24 & 255;
|
|
403
470
|
if (sa === 0) return dst;
|
|
404
|
-
const dr = dst & 255, dg = dst
|
|
405
|
-
const sr = src & 255, sg = src
|
|
406
|
-
const br = (sr < 128 ? sr === 0 ? 0 : Math.max(0, 255 - (255 - dr << 8) / (2 * sr)) : sr === 255 ? 255 : Math.min(255, (dr << 8) / (2 * (255 - sr)))) < 128 ? 0 : 255;
|
|
407
|
-
const bg = (sg < 128 ? sg === 0 ? 0 : Math.max(0, 255 - (255 - dg << 8) / (2 * sg)) : sg === 255 ? 255 : Math.min(255, (dg << 8) / (2 * (255 - sg)))) < 128 ? 0 : 255;
|
|
408
|
-
const bb = (sb < 128 ? sb === 0 ? 0 : Math.max(0, 255 - (255 - db << 8) / (2 * sb)) : sb === 255 ? 255 : Math.min(255, (db << 8) / (2 * (255 - sb)))) < 128 ? 0 : 255;
|
|
471
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
472
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
473
|
+
const br = (sr < 128 ? sr === 0 ? 0 : Math.max(0, 255 - (255 - dr << 8) / (2 * sr) | 0) : sr === 255 ? 255 : Math.min(255, (dr << 8) / (2 * (255 - sr)) | 0)) < 128 ? 0 : 255;
|
|
474
|
+
const bg = (sg < 128 ? sg === 0 ? 0 : Math.max(0, 255 - (255 - dg << 8) / (2 * sg) | 0) : sg === 255 ? 255 : Math.min(255, (dg << 8) / (2 * (255 - sg)) | 0)) < 128 ? 0 : 255;
|
|
475
|
+
const bb = (sb < 128 ? sb === 0 ? 0 : Math.max(0, 255 - (255 - db << 8) / (2 * sb) | 0) : sb === 255 ? 255 : Math.min(255, (db << 8) / (2 * (255 - sb)) | 0)) < 128 ? 0 : 255;
|
|
409
476
|
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
410
477
|
const invA = 255 - sa;
|
|
411
478
|
const r = br * sa + dr * invA >> 8;
|
|
@@ -414,13 +481,16 @@ var hardMixColor32 = (src, dst) => {
|
|
|
414
481
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
415
482
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
416
483
|
};
|
|
417
|
-
var
|
|
484
|
+
var differenceFast = (src, dst) => {
|
|
418
485
|
const sa = src >>> 24 & 255;
|
|
419
486
|
if (sa === 0) return dst;
|
|
420
|
-
const dr = dst & 255, dg = dst
|
|
421
|
-
const
|
|
422
|
-
const
|
|
423
|
-
const
|
|
487
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
488
|
+
const brD = (src & 255) - dr;
|
|
489
|
+
const bgD = (src >>> 8 & 255) - dg;
|
|
490
|
+
const bbD = (src >>> 16 & 255) - db;
|
|
491
|
+
const br = brD < 0 ? -brD : brD;
|
|
492
|
+
const bg = bgD < 0 ? -bgD : bgD;
|
|
493
|
+
const bb = bbD < 0 ? -bbD : bbD;
|
|
424
494
|
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
425
495
|
const invA = 255 - sa;
|
|
426
496
|
const r = br * sa + dr * invA >> 8;
|
|
@@ -429,11 +499,11 @@ var differenceColor32 = (src, dst) => {
|
|
|
429
499
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
430
500
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
431
501
|
};
|
|
432
|
-
var
|
|
502
|
+
var exclusionFast = (src, dst) => {
|
|
433
503
|
const sa = src >>> 24 & 255;
|
|
434
504
|
if (sa === 0) return dst;
|
|
435
|
-
const dr = dst & 255, dg = dst
|
|
436
|
-
const sr = src & 255, sg = src
|
|
505
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
506
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
437
507
|
const br = dr + sr - (dr * sr >> 7);
|
|
438
508
|
const bg = dg + sg - (dg * sg >> 7);
|
|
439
509
|
const bb = db + sb - (db * sb >> 7);
|
|
@@ -445,14 +515,17 @@ var exclusionColor32 = (src, dst) => {
|
|
|
445
515
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
446
516
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
447
517
|
};
|
|
448
|
-
var
|
|
518
|
+
var subtractFast = (src, dst) => {
|
|
449
519
|
const sa = src >>> 24 & 255;
|
|
450
520
|
if (sa === 0) return dst;
|
|
451
|
-
const dr = dst & 255, dg = dst
|
|
452
|
-
const sr = src & 255, sg = src
|
|
453
|
-
const
|
|
454
|
-
const
|
|
455
|
-
const
|
|
521
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
522
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
523
|
+
const brU = dr - sr;
|
|
524
|
+
const bgU = dg - sg;
|
|
525
|
+
const bbU = db - sb;
|
|
526
|
+
const br = brU < 0 ? 0 : brU;
|
|
527
|
+
const bg = bgU < 0 ? 0 : bgU;
|
|
528
|
+
const bb = bbU < 0 ? 0 : bbU;
|
|
456
529
|
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
457
530
|
const invA = 255 - sa;
|
|
458
531
|
const r = br * sa + dr * invA >> 8;
|
|
@@ -461,14 +534,14 @@ var subtractColor32 = (src, dst) => {
|
|
|
461
534
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
462
535
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
463
536
|
};
|
|
464
|
-
var
|
|
537
|
+
var divideFast = (src, dst) => {
|
|
465
538
|
const sa = src >>> 24 & 255;
|
|
466
539
|
if (sa === 0) return dst;
|
|
467
|
-
const dr = dst & 255, dg = dst
|
|
468
|
-
const sr = src & 255, sg = src
|
|
469
|
-
const br = sr === 0 ? 255 : Math.min(255, (dr << 8) / sr);
|
|
470
|
-
const bg = sg === 0 ? 255 : Math.min(255, (dg << 8) / sg);
|
|
471
|
-
const bb = sb === 0 ? 255 : Math.min(255, (db << 8) / sb);
|
|
540
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
541
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
542
|
+
const br = sr === 0 ? 255 : Math.min(255, (dr << 8) / sr | 0);
|
|
543
|
+
const bg = sg === 0 ? 255 : Math.min(255, (dg << 8) / sg | 0);
|
|
544
|
+
const bb = sb === 0 ? 255 : Math.min(255, (db << 8) / sb | 0);
|
|
472
545
|
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
473
546
|
const invA = 255 - sa;
|
|
474
547
|
const r = br * sa + dr * invA >> 8;
|
|
@@ -477,77 +550,76 @@ var divideColor32 = (src, dst) => {
|
|
|
477
550
|
const a = 255 * sa + (dst >>> 24 & 255) * invA >> 8;
|
|
478
551
|
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
479
552
|
};
|
|
480
|
-
var
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
return BlendMode2;
|
|
505
|
-
})(BlendMode || {});
|
|
506
|
-
var BLENDER_REGISTRY = [
|
|
507
|
-
[0 /* overwrite */, overwriteColor32],
|
|
508
|
-
[1 /* sourceOver */, sourceOverColor32],
|
|
509
|
-
[2 /* darken */, darkenColor32],
|
|
510
|
-
[3 /* multiply */, multiplyColor32],
|
|
511
|
-
[4 /* colorBurn */, colorBurnColor32],
|
|
512
|
-
[5 /* linearBurn */, linearBurnColor32],
|
|
513
|
-
[6 /* darkerColor */, darkerColor32],
|
|
514
|
-
[7 /* lighten */, lightenColor32],
|
|
515
|
-
[8 /* screen */, screenColor32],
|
|
516
|
-
[9 /* colorDodge */, colorDodgeColor32],
|
|
517
|
-
[10 /* linearDodge */, linearDodgeColor32],
|
|
518
|
-
[11 /* lighterColor */, lighterColor32],
|
|
519
|
-
[12 /* overlay */, overlayColor32],
|
|
520
|
-
[13 /* softLight */, softLightColor32],
|
|
521
|
-
[14 /* hardLight */, hardLightColor32],
|
|
522
|
-
[15 /* vividLight */, vividLightColor32],
|
|
523
|
-
[16 /* linearLight */, linearLightColor32],
|
|
524
|
-
[17 /* pinLight */, pinLightColor32],
|
|
525
|
-
[18 /* hardMix */, hardMixColor32],
|
|
526
|
-
[19 /* difference */, differenceColor32],
|
|
527
|
-
[20 /* exclusion */, exclusionColor32],
|
|
528
|
-
[21 /* subtract */, subtractColor32],
|
|
529
|
-
[22 /* divide */, divideColor32]
|
|
553
|
+
var FAST_BLENDER_REGISTRY = [
|
|
554
|
+
[0 /* overwrite */, overwriteFast],
|
|
555
|
+
[1 /* sourceOver */, sourceOverFast],
|
|
556
|
+
[2 /* darken */, darkenFast],
|
|
557
|
+
[3 /* multiply */, multiplyFast],
|
|
558
|
+
[4 /* colorBurn */, colorBurnFast],
|
|
559
|
+
[5 /* linearBurn */, linearBurnFast],
|
|
560
|
+
[6 /* darkerColor */, darkerFast],
|
|
561
|
+
[7 /* lighten */, lightenFast],
|
|
562
|
+
[8 /* screen */, screenFast],
|
|
563
|
+
[9 /* colorDodge */, colorDodgeFast],
|
|
564
|
+
[10 /* linearDodge */, linearDodgeFast],
|
|
565
|
+
[11 /* lighterColor */, lighterFast],
|
|
566
|
+
[12 /* overlay */, overlayFast],
|
|
567
|
+
[13 /* softLight */, softLightFast],
|
|
568
|
+
[14 /* hardLight */, hardLightFast],
|
|
569
|
+
[15 /* vividLight */, vividLightFast],
|
|
570
|
+
[16 /* linearLight */, linearLightFast],
|
|
571
|
+
[17 /* pinLight */, pinLightFast],
|
|
572
|
+
[18 /* hardMix */, hardMixFast],
|
|
573
|
+
[19 /* difference */, differenceFast],
|
|
574
|
+
[20 /* exclusion */, exclusionFast],
|
|
575
|
+
[21 /* subtract */, subtractFast],
|
|
576
|
+
[22 /* divide */, divideFast]
|
|
530
577
|
];
|
|
531
|
-
var
|
|
532
|
-
for (const [index, blend] of
|
|
533
|
-
|
|
578
|
+
var FAST_BLEND_MODES = [];
|
|
579
|
+
for (const [index, blend] of FAST_BLENDER_REGISTRY) {
|
|
580
|
+
FAST_BLEND_MODES[index] = blend;
|
|
534
581
|
}
|
|
535
|
-
var
|
|
536
|
-
|
|
582
|
+
var FAST_BLEND_TO_INDEX = new Map(
|
|
583
|
+
FAST_BLENDER_REGISTRY.map((entry, index) => {
|
|
537
584
|
return [
|
|
538
585
|
entry[1],
|
|
539
586
|
index
|
|
540
587
|
];
|
|
541
588
|
})
|
|
542
589
|
);
|
|
543
|
-
var
|
|
544
|
-
|
|
590
|
+
var INDEX_TO_FAST_BLEND = new Map(
|
|
591
|
+
FAST_BLENDER_REGISTRY.map((entry, index) => {
|
|
545
592
|
return [
|
|
546
593
|
index,
|
|
547
594
|
entry[1]
|
|
548
595
|
];
|
|
549
596
|
})
|
|
550
597
|
);
|
|
598
|
+
var FAST_BLEND_MODE_BY_NAME = {
|
|
599
|
+
overwrite: overwriteFast,
|
|
600
|
+
sourceOver: sourceOverFast,
|
|
601
|
+
darken: darkenFast,
|
|
602
|
+
multiply: multiplyFast,
|
|
603
|
+
colorBurn: colorBurnFast,
|
|
604
|
+
linearBurn: linearBurnFast,
|
|
605
|
+
darkerColor: darkerFast,
|
|
606
|
+
lighten: lightenFast,
|
|
607
|
+
screen: screenFast,
|
|
608
|
+
colorDodge: colorDodgeFast,
|
|
609
|
+
linearDodge: linearDodgeFast,
|
|
610
|
+
lighterColor: lighterFast,
|
|
611
|
+
overlay: overlayFast,
|
|
612
|
+
softLight: softLightFast,
|
|
613
|
+
hardLight: hardLightFast,
|
|
614
|
+
vividLight: vividLightFast,
|
|
615
|
+
linearLight: linearLightFast,
|
|
616
|
+
pinLight: pinLightFast,
|
|
617
|
+
hardMix: hardMixFast,
|
|
618
|
+
difference: differenceFast,
|
|
619
|
+
exclusion: exclusionFast,
|
|
620
|
+
subtract: subtractFast,
|
|
621
|
+
divide: divideFast
|
|
622
|
+
};
|
|
551
623
|
|
|
552
624
|
// src/_types.ts
|
|
553
625
|
var MaskType = /* @__PURE__ */ ((MaskType2) => {
|
|
@@ -908,6 +980,477 @@ function floodFillSelection(img, startX, startY, {
|
|
|
908
980
|
};
|
|
909
981
|
}
|
|
910
982
|
|
|
983
|
+
// src/BlendModes/blend-modes-perfect.ts
|
|
984
|
+
var overwritePerfect = (src, _dst) => src;
|
|
985
|
+
var sourceOverPerfect = (src, dst) => {
|
|
986
|
+
const sa = src >>> 24 & 255;
|
|
987
|
+
if (sa === 255) return src;
|
|
988
|
+
if (sa === 0) return dst;
|
|
989
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
990
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
991
|
+
const da = dst >>> 24 & 255;
|
|
992
|
+
const invA = 255 - sa;
|
|
993
|
+
const r = (sr * sa + dr * invA) / 255 | 0;
|
|
994
|
+
const g = (sg * sa + dg * invA) / 255 | 0;
|
|
995
|
+
const b = (sb * sa + db * invA) / 255 | 0;
|
|
996
|
+
const a = (255 * sa + da * invA) / 255 | 0;
|
|
997
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
998
|
+
};
|
|
999
|
+
var darkenPerfect = (src, dst) => {
|
|
1000
|
+
const sa = src >>> 24 & 255;
|
|
1001
|
+
if (sa === 0) return dst;
|
|
1002
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
1003
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1004
|
+
const br = sr < dr ? sr : dr;
|
|
1005
|
+
const bg = sg < dg ? sg : dg;
|
|
1006
|
+
const bb = sb < db ? sb : db;
|
|
1007
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1008
|
+
const invA = 255 - sa;
|
|
1009
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1010
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1011
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1012
|
+
const a = (255 * sa + (dst >>> 24 & 255) * invA) / 255 | 0;
|
|
1013
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1014
|
+
};
|
|
1015
|
+
var multiplyPerfect = (src, dst) => {
|
|
1016
|
+
const sa = src >>> 24 & 255;
|
|
1017
|
+
if (sa === 0) return dst;
|
|
1018
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
1019
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1020
|
+
const br = sr * dr / 255 | 0;
|
|
1021
|
+
const bg = sg * dg / 255 | 0;
|
|
1022
|
+
const bb = sb * db / 255 | 0;
|
|
1023
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1024
|
+
const invA = 255 - sa;
|
|
1025
|
+
const da = dst >>> 24 & 255;
|
|
1026
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1027
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1028
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1029
|
+
const a = (255 * sa + da * invA) / 255 | 0;
|
|
1030
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1031
|
+
};
|
|
1032
|
+
var colorBurnPerfect = (src, dst) => {
|
|
1033
|
+
const sa = src >>> 24 & 255;
|
|
1034
|
+
if (sa === 0) return dst;
|
|
1035
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
1036
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1037
|
+
const br = dr === 255 ? 255 : sr === 0 ? 0 : Math.max(0, 255 - ((255 - dr) * 255 / sr | 0));
|
|
1038
|
+
const bg = dg === 255 ? 255 : sg === 0 ? 0 : Math.max(0, 255 - ((255 - dg) * 255 / sg | 0));
|
|
1039
|
+
const bb = db === 255 ? 255 : sb === 0 ? 0 : Math.max(0, 255 - ((255 - db) * 255 / sb | 0));
|
|
1040
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1041
|
+
const invA = 255 - sa;
|
|
1042
|
+
const da = dst >>> 24 & 255;
|
|
1043
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1044
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1045
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1046
|
+
const a = (255 * sa + da * invA) / 255 | 0;
|
|
1047
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1048
|
+
};
|
|
1049
|
+
var linearBurnPerfect = (src, dst) => {
|
|
1050
|
+
const sa = src >>> 24 & 255;
|
|
1051
|
+
if (sa === 0) return dst;
|
|
1052
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1053
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
1054
|
+
const brU = dr + sr - 255;
|
|
1055
|
+
const br = brU < 0 ? 0 : brU;
|
|
1056
|
+
const bgU = dg + sg - 255;
|
|
1057
|
+
const bg = bgU < 0 ? 0 : bgU;
|
|
1058
|
+
const bbU = db + sb - 255;
|
|
1059
|
+
const bb = bbU < 0 ? 0 : bbU;
|
|
1060
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1061
|
+
const invA = 255 - sa;
|
|
1062
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1063
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1064
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1065
|
+
const a = (255 * sa + (dst >>> 24 & 255) * invA) / 255 | 0;
|
|
1066
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1067
|
+
};
|
|
1068
|
+
var darkerPerfect = (src, dst) => {
|
|
1069
|
+
const sa = src >>> 24 & 255;
|
|
1070
|
+
if (sa === 0) return dst;
|
|
1071
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1072
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
1073
|
+
const lumSrc = sr * 77 + sg * 151 + sb * 28;
|
|
1074
|
+
const lumDst = dr * 77 + dg * 151 + db * 28;
|
|
1075
|
+
let br, bg, bb;
|
|
1076
|
+
if (lumSrc < lumDst) {
|
|
1077
|
+
br = sr;
|
|
1078
|
+
bg = sg;
|
|
1079
|
+
bb = sb;
|
|
1080
|
+
} else {
|
|
1081
|
+
br = dr;
|
|
1082
|
+
bg = dg;
|
|
1083
|
+
bb = db;
|
|
1084
|
+
}
|
|
1085
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1086
|
+
const invA = 255 - sa;
|
|
1087
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1088
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1089
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1090
|
+
const a = (255 * sa + (dst >>> 24 & 255) * invA) / 255 | 0;
|
|
1091
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1092
|
+
};
|
|
1093
|
+
var lightenPerfect = (src, dst) => {
|
|
1094
|
+
const sa = src >>> 24 & 255;
|
|
1095
|
+
if (sa === 0) return dst;
|
|
1096
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1097
|
+
const br = (src & 255) > dr ? src & 255 : dr;
|
|
1098
|
+
const bg = (src >>> 8 & 255) > dg ? src >>> 8 & 255 : dg;
|
|
1099
|
+
const bb = (src >>> 16 & 255) > db ? src >>> 16 & 255 : db;
|
|
1100
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1101
|
+
const invA = 255 - sa;
|
|
1102
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1103
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1104
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1105
|
+
const a = (255 * sa + (dst >>> 24 & 255) * invA) / 255 | 0;
|
|
1106
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1107
|
+
};
|
|
1108
|
+
var screenPerfect = (src, dst) => {
|
|
1109
|
+
const sa = src >>> 24 & 255;
|
|
1110
|
+
if (sa === 0) return dst;
|
|
1111
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1112
|
+
const br = 255 - ((255 - (src & 255)) * (255 - dr) / 255 | 0);
|
|
1113
|
+
const bg = 255 - ((255 - (src >>> 8 & 255)) * (255 - dg) / 255 | 0);
|
|
1114
|
+
const bb = 255 - ((255 - (src >>> 16 & 255)) * (255 - db) / 255 | 0);
|
|
1115
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1116
|
+
const invA = 255 - sa;
|
|
1117
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1118
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1119
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1120
|
+
const a = (255 * sa + (dst >>> 24 & 255) * invA) / 255 | 0;
|
|
1121
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1122
|
+
};
|
|
1123
|
+
var colorDodgePerfect = (src, dst) => {
|
|
1124
|
+
const sa = src >>> 24 & 255;
|
|
1125
|
+
if (sa === 0) return dst;
|
|
1126
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1127
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
1128
|
+
const br = sr === 255 ? 255 : Math.min(255, dr * 255 / (255 - sr) | 0);
|
|
1129
|
+
const bg = sg === 255 ? 255 : Math.min(255, dg * 255 / (255 - sg) | 0);
|
|
1130
|
+
const bb = sb === 255 ? 255 : Math.min(255, db * 255 / (255 - sb) | 0);
|
|
1131
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1132
|
+
const invA = 255 - sa;
|
|
1133
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1134
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1135
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1136
|
+
const a = (255 * sa + (dst >>> 24 & 255) * invA) / 255 | 0;
|
|
1137
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1138
|
+
};
|
|
1139
|
+
var linearDodgePerfect = (src, dst) => {
|
|
1140
|
+
const sa = src >>> 24 & 255;
|
|
1141
|
+
if (sa === 0) return dst;
|
|
1142
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1143
|
+
const brU = (src & 255) + dr;
|
|
1144
|
+
const br = brU > 255 ? 255 : brU;
|
|
1145
|
+
const bgU = (src >>> 8 & 255) + dg;
|
|
1146
|
+
const bg = bgU > 255 ? 255 : bgU;
|
|
1147
|
+
const bbU = (src >>> 16 & 255) + db;
|
|
1148
|
+
const bb = bbU > 255 ? 255 : bbU;
|
|
1149
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1150
|
+
const invA = 255 - sa;
|
|
1151
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1152
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1153
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1154
|
+
const a = (255 * sa + (dst >>> 24 & 255) * invA) / 255 | 0;
|
|
1155
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1156
|
+
};
|
|
1157
|
+
var lighterPerfect = (src, dst) => {
|
|
1158
|
+
const sa = src >>> 24 & 255;
|
|
1159
|
+
if (sa === 0) return dst;
|
|
1160
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1161
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
1162
|
+
const lumSrc = sr * 77 + sg * 151 + sb * 28;
|
|
1163
|
+
const lumDst = dr * 77 + dg * 151 + db * 28;
|
|
1164
|
+
let br, bg, bb;
|
|
1165
|
+
if (lumSrc > lumDst) {
|
|
1166
|
+
br = sr;
|
|
1167
|
+
bg = sg;
|
|
1168
|
+
bb = sb;
|
|
1169
|
+
} else {
|
|
1170
|
+
br = dr;
|
|
1171
|
+
bg = dg;
|
|
1172
|
+
bb = db;
|
|
1173
|
+
}
|
|
1174
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1175
|
+
const invA = 255 - sa;
|
|
1176
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1177
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1178
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1179
|
+
const a = (255 * sa + (dst >>> 24 & 255) * invA) / 255 | 0;
|
|
1180
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1181
|
+
};
|
|
1182
|
+
var overlayPerfect = (src, dst) => {
|
|
1183
|
+
const sa = src >>> 24 & 255;
|
|
1184
|
+
if (sa === 0) return dst;
|
|
1185
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
1186
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1187
|
+
const br = dr < 128 ? 2 * sr * dr / 255 | 0 : 255 - (2 * (255 - sr) * (255 - dr) / 255 | 0);
|
|
1188
|
+
const bg = dg < 128 ? 2 * sg * dg / 255 | 0 : 255 - (2 * (255 - sg) * (255 - dg) / 255 | 0);
|
|
1189
|
+
const bb = db < 128 ? 2 * sb * db / 255 | 0 : 255 - (2 * (255 - sb) * (255 - db) / 255 | 0);
|
|
1190
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1191
|
+
const invA = 255 - sa;
|
|
1192
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1193
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1194
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1195
|
+
const a = (255 * sa + (dst >>> 24 & 255) * invA) / 255 | 0;
|
|
1196
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1197
|
+
};
|
|
1198
|
+
var softLightPerfect = (src, dst) => {
|
|
1199
|
+
const sa = src >>> 24 & 255;
|
|
1200
|
+
if (sa === 0) return dst;
|
|
1201
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1202
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
1203
|
+
const br = ((255 - dr) * (sr * dr / 255 | 0) + dr * (255 - ((255 - sr) * (255 - dr) / 255 | 0))) / 255 | 0;
|
|
1204
|
+
const bg = ((255 - dg) * (sg * dg / 255 | 0) + dg * (255 - ((255 - sg) * (255 - dg) / 255 | 0))) / 255 | 0;
|
|
1205
|
+
const bb = ((255 - db) * (sb * db / 255 | 0) + db * (255 - ((255 - sb) * (255 - db) / 255 | 0))) / 255 | 0;
|
|
1206
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1207
|
+
const invA = 255 - sa;
|
|
1208
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1209
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1210
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1211
|
+
const a = (255 * sa + (dst >>> 24 & 255) * invA) / 255 | 0;
|
|
1212
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1213
|
+
};
|
|
1214
|
+
var hardLightPerfect = (src, dst) => {
|
|
1215
|
+
const sa = src >>> 24 & 255;
|
|
1216
|
+
if (sa === 0) return dst;
|
|
1217
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1218
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
1219
|
+
const br = sr < 128 ? 2 * sr * dr / 255 | 0 : 255 - (2 * (255 - sr) * (255 - dr) / 255 | 0);
|
|
1220
|
+
const bg = sg < 128 ? 2 * sg * dg / 255 | 0 : 255 - (2 * (255 - sg) * (255 - dg) / 255 | 0);
|
|
1221
|
+
const bb = sb < 128 ? 2 * sb * db / 255 | 0 : 255 - (2 * (255 - sb) * (255 - db) / 255 | 0);
|
|
1222
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1223
|
+
const invA = 255 - sa;
|
|
1224
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1225
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1226
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1227
|
+
const a = (255 * sa + (dst >>> 24 & 255) * invA) / 255 | 0;
|
|
1228
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1229
|
+
};
|
|
1230
|
+
var vividLightPerfect = (src, dst) => {
|
|
1231
|
+
const sa = src >>> 24 & 255;
|
|
1232
|
+
if (sa === 0) return dst;
|
|
1233
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1234
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
1235
|
+
const br = sr < 128 ? sr === 0 ? 0 : Math.max(0, 255 - ((255 - dr) * 255 / (2 * sr) | 0)) : sr === 255 ? 255 : Math.min(255, dr * 255 / (2 * (255 - sr)) | 0);
|
|
1236
|
+
const bg = sg < 128 ? sg === 0 ? 0 : Math.max(0, 255 - ((255 - dg) * 255 / (2 * sg) | 0)) : sg === 255 ? 255 : Math.min(255, dg * 255 / (2 * (255 - sg)) | 0);
|
|
1237
|
+
const bb = sb < 128 ? sb === 0 ? 0 : Math.max(0, 255 - ((255 - db) * 255 / (2 * sb) | 0)) : sb === 255 ? 255 : Math.min(255, db * 255 / (2 * (255 - sb)) | 0);
|
|
1238
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1239
|
+
const invA = 255 - sa;
|
|
1240
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1241
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1242
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1243
|
+
const a = (255 * sa + (dst >>> 24 & 255) * invA) / 255 | 0;
|
|
1244
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1245
|
+
};
|
|
1246
|
+
var linearLightPerfect = (src, dst) => {
|
|
1247
|
+
const sa = src >>> 24 & 255;
|
|
1248
|
+
if (sa === 0) return dst;
|
|
1249
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1250
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
1251
|
+
const brU = dr + 2 * sr - 255;
|
|
1252
|
+
const br = brU < 0 ? 0 : brU > 255 ? 255 : brU;
|
|
1253
|
+
const bgU = dg + 2 * sg - 255;
|
|
1254
|
+
const bg = bgU < 0 ? 0 : bgU > 255 ? 255 : bgU;
|
|
1255
|
+
const bbU = db + 2 * sb - 255;
|
|
1256
|
+
const bb = bbU < 0 ? 0 : bbU > 255 ? 255 : bbU;
|
|
1257
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1258
|
+
const invA = 255 - sa;
|
|
1259
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1260
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1261
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1262
|
+
const a = (255 * sa + (dst >>> 24 & 255) * invA) / 255 | 0;
|
|
1263
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1264
|
+
};
|
|
1265
|
+
var pinLightPerfect = (src, dst) => {
|
|
1266
|
+
const sa = src >>> 24 & 255;
|
|
1267
|
+
if (sa === 0) return dst;
|
|
1268
|
+
const dr = dst & 255;
|
|
1269
|
+
const dg = dst >>> 8 & 255;
|
|
1270
|
+
const db = dst >>> 16 & 255;
|
|
1271
|
+
const sr = src & 255;
|
|
1272
|
+
const sg = src >>> 8 & 255;
|
|
1273
|
+
const sb = src >>> 16 & 255;
|
|
1274
|
+
const br = sr < 128 ? dr < sr << 1 ? dr : sr << 1 : dr > sr - 128 << 1 ? dr : sr - 128 << 1;
|
|
1275
|
+
const bg = sg < 128 ? dg < sg << 1 ? dg : sg << 1 : dg > sg - 128 << 1 ? dg : sg - 128 << 1;
|
|
1276
|
+
const bb = sb < 128 ? db < sb << 1 ? db : sb << 1 : db > sb - 128 << 1 ? db : sb - 128 << 1;
|
|
1277
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1278
|
+
const invA = 255 - sa;
|
|
1279
|
+
const da = dst >>> 24 & 255;
|
|
1280
|
+
const r = (br * sa + dr * invA + 128) / 255 | 0;
|
|
1281
|
+
const g = (bg * sa + dg * invA + 128) / 255 | 0;
|
|
1282
|
+
const b = (bb * sa + db * invA + 128) / 255 | 0;
|
|
1283
|
+
const a = (255 * sa + da * invA + 128) / 255 | 0;
|
|
1284
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1285
|
+
};
|
|
1286
|
+
var hardMixPerfect = (src, dst) => {
|
|
1287
|
+
const sa = src >>> 24 & 255;
|
|
1288
|
+
if (sa === 0) return dst;
|
|
1289
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1290
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
1291
|
+
const br = (sr < 128 ? sr === 0 ? 0 : Math.max(0, 255 - ((255 - dr) * 255 / (2 * sr) | 0)) : sr === 255 ? 255 : Math.min(255, dr * 255 / (2 * (255 - sr)) | 0)) < 128 ? 0 : 255;
|
|
1292
|
+
const bg = (sg < 128 ? sg === 0 ? 0 : Math.max(0, 255 - ((255 - dg) * 255 / (2 * sg) | 0)) : sg === 255 ? 255 : Math.min(255, dg * 255 / (2 * (255 - sg)) | 0)) < 128 ? 0 : 255;
|
|
1293
|
+
const bb = (sb < 128 ? sb === 0 ? 0 : Math.max(0, 255 - ((255 - db) * 255 / (2 * sb) | 0)) : sb === 255 ? 255 : Math.min(255, db * 255 / (2 * (255 - sb)) | 0)) < 128 ? 0 : 255;
|
|
1294
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1295
|
+
const invA = 255 - sa;
|
|
1296
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1297
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1298
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1299
|
+
const a = (255 * sa + (dst >>> 24 & 255) * invA) / 255 | 0;
|
|
1300
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1301
|
+
};
|
|
1302
|
+
var differencePerfect = (src, dst) => {
|
|
1303
|
+
const sa = src >>> 24 & 255;
|
|
1304
|
+
if (sa === 0) return dst;
|
|
1305
|
+
const dr = dst & 255;
|
|
1306
|
+
const dg = dst >>> 8 & 255;
|
|
1307
|
+
const db = dst >>> 16 & 255;
|
|
1308
|
+
const sr = src & 255;
|
|
1309
|
+
const sg = src >>> 8 & 255;
|
|
1310
|
+
const sb = src >>> 16 & 255;
|
|
1311
|
+
const br = Math.abs(dr - sr);
|
|
1312
|
+
const bg = Math.abs(dg - sg);
|
|
1313
|
+
const bb = Math.abs(db - sb);
|
|
1314
|
+
if (sa === 255) {
|
|
1315
|
+
return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1316
|
+
}
|
|
1317
|
+
const invA = 255 - sa;
|
|
1318
|
+
const da = dst >>> 24 & 255;
|
|
1319
|
+
const r = (br * sa + dr * invA + 128) / 255 | 0;
|
|
1320
|
+
const g = (bg * sa + dg * invA + 128) / 255 | 0;
|
|
1321
|
+
const b = (bb * sa + db * invA + 128) / 255 | 0;
|
|
1322
|
+
const a = (255 * sa + da * invA + 128) / 255 | 0;
|
|
1323
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1324
|
+
};
|
|
1325
|
+
var exclusionPerfect = (src, dst) => {
|
|
1326
|
+
const sa = src >>> 24 & 255;
|
|
1327
|
+
if (sa === 0) return dst;
|
|
1328
|
+
const dr = dst & 255;
|
|
1329
|
+
const dg = dst >>> 8 & 255;
|
|
1330
|
+
const db = dst >>> 16 & 255;
|
|
1331
|
+
const sr = src & 255;
|
|
1332
|
+
const sg = src >>> 8 & 255;
|
|
1333
|
+
const sb = src >>> 16 & 255;
|
|
1334
|
+
const br = dr + sr - (dr * sr >> 7);
|
|
1335
|
+
const bg = dg + sg - (dg * sg >> 7);
|
|
1336
|
+
const bb = db + sb - (db * sb >> 7);
|
|
1337
|
+
if (sa === 255) {
|
|
1338
|
+
return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1339
|
+
}
|
|
1340
|
+
const invA = 255 - sa;
|
|
1341
|
+
const da = dst >>> 24 & 255;
|
|
1342
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1343
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1344
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1345
|
+
const a = (255 * sa + da * invA) / 255 | 0;
|
|
1346
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1347
|
+
};
|
|
1348
|
+
var subtractPerfect = (src, dst) => {
|
|
1349
|
+
const sa = src >>> 24 & 255;
|
|
1350
|
+
if (sa === 0) return dst;
|
|
1351
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1352
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
1353
|
+
const brU = dr - sr;
|
|
1354
|
+
const br = brU < 0 ? 0 : brU;
|
|
1355
|
+
const bgU = dg - sg;
|
|
1356
|
+
const bg = bgU < 0 ? 0 : bgU;
|
|
1357
|
+
const bbU = db - sb;
|
|
1358
|
+
const bb = bbU < 0 ? 0 : bbU;
|
|
1359
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1360
|
+
const invA = 255 - sa;
|
|
1361
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1362
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1363
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1364
|
+
const a = (255 * sa + (dst >>> 24 & 255) * invA) / 255 | 0;
|
|
1365
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1366
|
+
};
|
|
1367
|
+
var dividePerfect = (src, dst) => {
|
|
1368
|
+
const sa = src >>> 24 & 255;
|
|
1369
|
+
if (sa === 0) return dst;
|
|
1370
|
+
const dr = dst & 255, dg = dst >>> 8 & 255, db = dst >>> 16 & 255;
|
|
1371
|
+
const sr = src & 255, sg = src >>> 8 & 255, sb = src >>> 16 & 255;
|
|
1372
|
+
const br = sr === 0 ? 255 : Math.min(255, dr * 255 / sr | 0);
|
|
1373
|
+
const bg = sg === 0 ? 255 : Math.min(255, dg * 255 / sg | 0);
|
|
1374
|
+
const bb = sb === 0 ? 255 : Math.min(255, db * 255 / sb | 0);
|
|
1375
|
+
if (sa === 255) return (4278190080 | bb << 16 | bg << 8 | br) >>> 0;
|
|
1376
|
+
const invA = 255 - sa;
|
|
1377
|
+
const r = (br * sa + dr * invA) / 255 | 0;
|
|
1378
|
+
const g = (bg * sa + dg * invA) / 255 | 0;
|
|
1379
|
+
const b = (bb * sa + db * invA) / 255 | 0;
|
|
1380
|
+
const a = (255 * sa + (dst >>> 24 & 255) * invA) / 255 | 0;
|
|
1381
|
+
return (a << 24 | b << 16 | g << 8 | r) >>> 0;
|
|
1382
|
+
};
|
|
1383
|
+
var PERFECT_BLENDER_REGISTRY = [
|
|
1384
|
+
[0 /* overwrite */, overwritePerfect],
|
|
1385
|
+
[1 /* sourceOver */, sourceOverPerfect],
|
|
1386
|
+
[2 /* darken */, darkenPerfect],
|
|
1387
|
+
[3 /* multiply */, multiplyPerfect],
|
|
1388
|
+
[4 /* colorBurn */, colorBurnPerfect],
|
|
1389
|
+
[5 /* linearBurn */, linearBurnPerfect],
|
|
1390
|
+
[6 /* darkerColor */, darkerPerfect],
|
|
1391
|
+
[7 /* lighten */, lightenPerfect],
|
|
1392
|
+
[8 /* screen */, screenPerfect],
|
|
1393
|
+
[9 /* colorDodge */, colorDodgePerfect],
|
|
1394
|
+
[10 /* linearDodge */, linearDodgePerfect],
|
|
1395
|
+
[11 /* lighterColor */, lighterPerfect],
|
|
1396
|
+
[12 /* overlay */, overlayPerfect],
|
|
1397
|
+
[13 /* softLight */, softLightPerfect],
|
|
1398
|
+
[14 /* hardLight */, hardLightPerfect],
|
|
1399
|
+
[15 /* vividLight */, vividLightPerfect],
|
|
1400
|
+
[16 /* linearLight */, linearLightPerfect],
|
|
1401
|
+
[17 /* pinLight */, pinLightPerfect],
|
|
1402
|
+
[18 /* hardMix */, hardMixPerfect],
|
|
1403
|
+
[19 /* difference */, differencePerfect],
|
|
1404
|
+
[20 /* exclusion */, exclusionPerfect],
|
|
1405
|
+
[21 /* subtract */, subtractPerfect],
|
|
1406
|
+
[22 /* divide */, dividePerfect]
|
|
1407
|
+
];
|
|
1408
|
+
var PERFECT_BLEND_MODES = [];
|
|
1409
|
+
for (const [index, blend] of PERFECT_BLENDER_REGISTRY) {
|
|
1410
|
+
PERFECT_BLEND_MODES[index] = blend;
|
|
1411
|
+
}
|
|
1412
|
+
var PERFECT_BLEND_TO_INDEX = new Map(
|
|
1413
|
+
PERFECT_BLENDER_REGISTRY.map((entry, index) => {
|
|
1414
|
+
return [
|
|
1415
|
+
entry[1],
|
|
1416
|
+
index
|
|
1417
|
+
];
|
|
1418
|
+
})
|
|
1419
|
+
);
|
|
1420
|
+
var INDEX_TO_PERFECT_BLEND = new Map(
|
|
1421
|
+
PERFECT_BLENDER_REGISTRY.map((entry, index) => {
|
|
1422
|
+
return [
|
|
1423
|
+
index,
|
|
1424
|
+
entry[1]
|
|
1425
|
+
];
|
|
1426
|
+
})
|
|
1427
|
+
);
|
|
1428
|
+
var PERFECT_BLEND_MODE_BY_NAME = {
|
|
1429
|
+
overwrite: overwritePerfect,
|
|
1430
|
+
sourceOver: sourceOverPerfect,
|
|
1431
|
+
darken: darkenPerfect,
|
|
1432
|
+
multiply: multiplyPerfect,
|
|
1433
|
+
colorBurn: colorBurnPerfect,
|
|
1434
|
+
linearBurn: linearBurnPerfect,
|
|
1435
|
+
darkerColor: darkerPerfect,
|
|
1436
|
+
lighten: lightenPerfect,
|
|
1437
|
+
screen: screenPerfect,
|
|
1438
|
+
colorDodge: colorDodgePerfect,
|
|
1439
|
+
linearDodge: linearDodgePerfect,
|
|
1440
|
+
lighterColor: lighterPerfect,
|
|
1441
|
+
overlay: overlayPerfect,
|
|
1442
|
+
softLight: softLightPerfect,
|
|
1443
|
+
hardLight: hardLightPerfect,
|
|
1444
|
+
vividLight: vividLightPerfect,
|
|
1445
|
+
linearLight: linearLightPerfect,
|
|
1446
|
+
pinLight: pinLightPerfect,
|
|
1447
|
+
hardMix: hardMixPerfect,
|
|
1448
|
+
difference: differencePerfect,
|
|
1449
|
+
exclusion: exclusionPerfect,
|
|
1450
|
+
subtract: subtractPerfect,
|
|
1451
|
+
divide: dividePerfect
|
|
1452
|
+
};
|
|
1453
|
+
|
|
911
1454
|
// src/Canvas/_constants.ts
|
|
912
1455
|
var OFFSCREEN_CANVAS_CTX_FAILED = "Failed to create OffscreenCanvas context";
|
|
913
1456
|
var CANVAS_CTX_FAILED = "Failed to create Canvas context";
|
|
@@ -1188,40 +1731,25 @@ function writeImageDataPixels(imageData, data, _x, _y, _w, _h) {
|
|
|
1188
1731
|
function makeIndexedImage(imageData) {
|
|
1189
1732
|
const width = imageData.width;
|
|
1190
1733
|
const height = imageData.height;
|
|
1191
|
-
const rawData = imageData.data;
|
|
1192
|
-
const indexedData = new Int32Array(rawData.length
|
|
1734
|
+
const rawData = new Uint32Array(imageData.data.buffer);
|
|
1735
|
+
const indexedData = new Int32Array(rawData.length);
|
|
1193
1736
|
const colorMap = /* @__PURE__ */ new Map();
|
|
1194
|
-
const
|
|
1195
|
-
const transparentKey = "0,0,0,0";
|
|
1737
|
+
const transparentColor = 0;
|
|
1196
1738
|
const transparentPalletIndex = 0;
|
|
1197
|
-
colorMap.set(
|
|
1198
|
-
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
const g = rawData[i * 4 + 1];
|
|
1205
|
-
const b = rawData[i * 4 + 2];
|
|
1206
|
-
const a = rawData[i * 4 + 3];
|
|
1207
|
-
let key;
|
|
1208
|
-
if (a === 0) {
|
|
1209
|
-
key = transparentKey;
|
|
1210
|
-
} else {
|
|
1211
|
-
key = `${r},${g},${b},${a}`;
|
|
1212
|
-
}
|
|
1213
|
-
let id = colorMap.get(key);
|
|
1739
|
+
colorMap.set(transparentColor, transparentPalletIndex);
|
|
1740
|
+
for (let i = 0; i < rawData.length; i++) {
|
|
1741
|
+
const pixel = rawData[i];
|
|
1742
|
+
const alpha = pixel >>> 24 & 255;
|
|
1743
|
+
const isTransparent = alpha === 0;
|
|
1744
|
+
const colorKey = isTransparent ? transparentColor : pixel;
|
|
1745
|
+
let id = colorMap.get(colorKey);
|
|
1214
1746
|
if (id === void 0) {
|
|
1215
1747
|
id = colorMap.size;
|
|
1216
|
-
|
|
1217
|
-
tempPalette.push(g);
|
|
1218
|
-
tempPalette.push(b);
|
|
1219
|
-
tempPalette.push(a);
|
|
1220
|
-
colorMap.set(key, id);
|
|
1748
|
+
colorMap.set(colorKey, id);
|
|
1221
1749
|
}
|
|
1222
1750
|
indexedData[i] = id;
|
|
1223
1751
|
}
|
|
1224
|
-
const palette = new
|
|
1752
|
+
const palette = new Int32Array(colorMap.keys());
|
|
1225
1753
|
return {
|
|
1226
1754
|
width,
|
|
1227
1755
|
height,
|
|
@@ -1234,7 +1762,7 @@ function makeIndexedImage(imageData) {
|
|
|
1234
1762
|
// src/IndexedImage/indexedImageToAverageColor.ts
|
|
1235
1763
|
function indexedImageToAverageColor(indexedImage, includeTransparent = false) {
|
|
1236
1764
|
const { data, palette, transparentPalletIndex } = indexedImage;
|
|
1237
|
-
const counts = new Uint32Array(palette.length
|
|
1765
|
+
const counts = new Uint32Array(palette.length);
|
|
1238
1766
|
for (let i = 0; i < data.length; i++) {
|
|
1239
1767
|
const id = data[i];
|
|
1240
1768
|
counts[id]++;
|
|
@@ -1252,11 +1780,11 @@ function indexedImageToAverageColor(indexedImage, includeTransparent = false) {
|
|
|
1252
1780
|
if (!includeTransparent && id === transparentPalletIndex) {
|
|
1253
1781
|
continue;
|
|
1254
1782
|
}
|
|
1255
|
-
const
|
|
1256
|
-
const r2 =
|
|
1257
|
-
const g2 =
|
|
1258
|
-
const b2 =
|
|
1259
|
-
const a2 =
|
|
1783
|
+
const color = palette[id] >>> 0;
|
|
1784
|
+
const r2 = color & 255;
|
|
1785
|
+
const g2 = color >> 8 & 255;
|
|
1786
|
+
const b2 = color >> 16 & 255;
|
|
1787
|
+
const a2 = color >> 24 & 255;
|
|
1260
1788
|
rSum += r2 * weight;
|
|
1261
1789
|
gSum += g2 * weight;
|
|
1262
1790
|
bSum += b2 * weight;
|
|
@@ -1443,7 +1971,7 @@ function mergeMasks(dst, dstWidth, src, opts) {
|
|
|
1443
1971
|
}
|
|
1444
1972
|
|
|
1445
1973
|
// src/PixelData/PixelData.ts
|
|
1446
|
-
var PixelData = class {
|
|
1974
|
+
var PixelData = class _PixelData {
|
|
1447
1975
|
constructor(imageData) {
|
|
1448
1976
|
this.imageData = imageData;
|
|
1449
1977
|
this.width = imageData.width;
|
|
@@ -1451,12 +1979,22 @@ var PixelData = class {
|
|
|
1451
1979
|
this.data32 = new Uint32Array(
|
|
1452
1980
|
imageData.data.buffer,
|
|
1453
1981
|
imageData.data.byteOffset,
|
|
1982
|
+
// Shift right by 2 is a fast bitwise division by 4.
|
|
1454
1983
|
imageData.data.byteLength >> 2
|
|
1455
1984
|
);
|
|
1456
1985
|
}
|
|
1457
1986
|
data32;
|
|
1458
1987
|
width;
|
|
1459
1988
|
height;
|
|
1989
|
+
copy() {
|
|
1990
|
+
const buffer = new Uint8ClampedArray(this.data32.buffer.slice(0));
|
|
1991
|
+
const imageData = {
|
|
1992
|
+
data: buffer,
|
|
1993
|
+
width: this.width,
|
|
1994
|
+
height: this.height
|
|
1995
|
+
};
|
|
1996
|
+
return new _PixelData(imageData);
|
|
1997
|
+
}
|
|
1460
1998
|
};
|
|
1461
1999
|
|
|
1462
2000
|
// src/PixelData/applyMaskToPixelData.ts
|
|
@@ -1554,7 +2092,7 @@ function blendColorPixelData(dst, color, opts) {
|
|
|
1554
2092
|
w: width = dst.width,
|
|
1555
2093
|
h: height = dst.height,
|
|
1556
2094
|
alpha: globalAlpha = 255,
|
|
1557
|
-
blendFn =
|
|
2095
|
+
blendFn = FAST_BLEND_MODES[1 /* sourceOver */],
|
|
1558
2096
|
mask,
|
|
1559
2097
|
maskType = 0 /* ALPHA */,
|
|
1560
2098
|
mw,
|
|
@@ -1663,7 +2201,7 @@ function blendPixelData(dst, src, opts) {
|
|
|
1663
2201
|
w: width = src.width,
|
|
1664
2202
|
h: height = src.height,
|
|
1665
2203
|
alpha: globalAlpha = 255,
|
|
1666
|
-
blendFn =
|
|
2204
|
+
blendFn = FAST_BLEND_MODES[1 /* sourceOver */],
|
|
1667
2205
|
mask,
|
|
1668
2206
|
maskType = 0 /* ALPHA */,
|
|
1669
2207
|
mw,
|
|
@@ -1854,10 +2392,17 @@ function invertPixelData(pixelData) {
|
|
|
1854
2392
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1855
2393
|
0 && (module.exports = {
|
|
1856
2394
|
BlendMode,
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
2395
|
+
FAST_BLENDER_REGISTRY,
|
|
2396
|
+
FAST_BLEND_MODES,
|
|
2397
|
+
FAST_BLEND_MODE_BY_NAME,
|
|
2398
|
+
FAST_BLEND_TO_INDEX,
|
|
2399
|
+
INDEX_TO_FAST_BLEND,
|
|
2400
|
+
INDEX_TO_PERFECT_BLEND,
|
|
1860
2401
|
MaskType,
|
|
2402
|
+
PERFECT_BLENDER_REGISTRY,
|
|
2403
|
+
PERFECT_BLEND_MODES,
|
|
2404
|
+
PERFECT_BLEND_MODE_BY_NAME,
|
|
2405
|
+
PERFECT_BLEND_TO_INDEX,
|
|
1861
2406
|
PixelData,
|
|
1862
2407
|
UnsupportedFormatError,
|
|
1863
2408
|
applyMaskToPixelData,
|
|
@@ -1868,20 +2413,27 @@ function invertPixelData(pixelData) {
|
|
|
1868
2413
|
clearPixelData,
|
|
1869
2414
|
color32ToCssRGBA,
|
|
1870
2415
|
color32ToHex,
|
|
1871
|
-
|
|
2416
|
+
colorBurnFast,
|
|
2417
|
+
colorBurnPerfect,
|
|
1872
2418
|
colorDistance,
|
|
1873
|
-
|
|
2419
|
+
colorDodgeFast,
|
|
2420
|
+
colorDodgePerfect,
|
|
1874
2421
|
copyImageData,
|
|
1875
2422
|
copyImageDataLike,
|
|
1876
2423
|
copyMask,
|
|
1877
|
-
|
|
1878
|
-
|
|
2424
|
+
darkenFast,
|
|
2425
|
+
darkenPerfect,
|
|
2426
|
+
darkerFast,
|
|
2427
|
+
darkerPerfect,
|
|
1879
2428
|
deserializeImageData,
|
|
1880
2429
|
deserializeNullableImageData,
|
|
1881
2430
|
deserializeRawImageData,
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
2431
|
+
differenceFast,
|
|
2432
|
+
differencePerfect,
|
|
2433
|
+
divideFast,
|
|
2434
|
+
dividePerfect,
|
|
2435
|
+
exclusionFast,
|
|
2436
|
+
exclusionPerfect,
|
|
1885
2437
|
extractImageDataPixels,
|
|
1886
2438
|
extractMask,
|
|
1887
2439
|
fileInputChangeToImageData,
|
|
@@ -1890,8 +2442,10 @@ function invertPixelData(pixelData) {
|
|
|
1890
2442
|
floodFillSelection,
|
|
1891
2443
|
getImageDataFromClipboard,
|
|
1892
2444
|
getSupportedPixelFormats,
|
|
1893
|
-
|
|
1894
|
-
|
|
2445
|
+
hardLightFast,
|
|
2446
|
+
hardLightPerfect,
|
|
2447
|
+
hardMixFast,
|
|
2448
|
+
hardMixPerfect,
|
|
1895
2449
|
imageDataToAlphaMask,
|
|
1896
2450
|
imageDataToDataUrl,
|
|
1897
2451
|
imageDataToImgBlob,
|
|
@@ -1903,29 +2457,42 @@ function invertPixelData(pixelData) {
|
|
|
1903
2457
|
invertPixelData,
|
|
1904
2458
|
lerpColor32,
|
|
1905
2459
|
lerpColor32Fast,
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
2460
|
+
lightenFast,
|
|
2461
|
+
lightenPerfect,
|
|
2462
|
+
lighterFast,
|
|
2463
|
+
lighterPerfect,
|
|
2464
|
+
linearBurnFast,
|
|
2465
|
+
linearBurnPerfect,
|
|
2466
|
+
linearDodgeFast,
|
|
2467
|
+
linearDodgePerfect,
|
|
2468
|
+
linearLightFast,
|
|
2469
|
+
linearLightPerfect,
|
|
1911
2470
|
makeIndexedImage,
|
|
1912
2471
|
makePixelCanvas,
|
|
1913
2472
|
makeReusableCanvas,
|
|
1914
2473
|
mergeMasks,
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
2474
|
+
multiplyFast,
|
|
2475
|
+
multiplyPerfect,
|
|
2476
|
+
overlayFast,
|
|
2477
|
+
overlayPerfect,
|
|
2478
|
+
overwriteFast,
|
|
2479
|
+
overwritePerfect,
|
|
1918
2480
|
packColor,
|
|
1919
2481
|
packRGBA,
|
|
1920
|
-
|
|
2482
|
+
pinLightFast,
|
|
2483
|
+
pinLightPerfect,
|
|
1921
2484
|
pixelDataToAlphaMask,
|
|
1922
2485
|
resizeImageData,
|
|
1923
|
-
|
|
2486
|
+
screenFast,
|
|
2487
|
+
screenPerfect,
|
|
1924
2488
|
serializeImageData,
|
|
1925
2489
|
serializeNullableImageData,
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
2490
|
+
softLightFast,
|
|
2491
|
+
softLightPerfect,
|
|
2492
|
+
sourceOverFast,
|
|
2493
|
+
sourceOverPerfect,
|
|
2494
|
+
subtractFast,
|
|
2495
|
+
subtractPerfect,
|
|
1929
2496
|
trimRectBounds,
|
|
1930
2497
|
unpackAlpha,
|
|
1931
2498
|
unpackBlue,
|
|
@@ -1933,7 +2500,8 @@ function invertPixelData(pixelData) {
|
|
|
1933
2500
|
unpackColorTo,
|
|
1934
2501
|
unpackGreen,
|
|
1935
2502
|
unpackRed,
|
|
1936
|
-
|
|
2503
|
+
vividLightFast,
|
|
2504
|
+
vividLightPerfect,
|
|
1937
2505
|
writeImageDataPixels,
|
|
1938
2506
|
writeImageDataToClipboard,
|
|
1939
2507
|
writeImgBlobToClipboard
|