pixel-data-js 0.5.3 → 0.8.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 +826 -256
- package/dist/index.dev.cjs.map +1 -1
- package/dist/index.dev.js +770 -230
- package/dist/index.dev.js.map +1 -1
- package/dist/index.prod.cjs +826 -256
- package/dist/index.prod.cjs.map +1 -1
- package/dist/index.prod.d.ts +162 -100
- package/dist/index.prod.js +770 -230
- package/dist/index.prod.js.map +1 -1
- package/package.json +1 -1
- 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 +32 -49
- 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,27 @@ 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
1737
|
const tempPalette = [];
|
|
1195
|
-
const
|
|
1738
|
+
const transparentColor = 0;
|
|
1196
1739
|
const transparentPalletIndex = 0;
|
|
1197
|
-
colorMap.set(
|
|
1198
|
-
tempPalette.push(
|
|
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);
|
|
1740
|
+
colorMap.set(transparentColor, transparentPalletIndex);
|
|
1741
|
+
tempPalette.push(transparentColor);
|
|
1742
|
+
for (let i = 0; i < rawData.length; i++) {
|
|
1743
|
+
const pixel = rawData[i];
|
|
1744
|
+
const isTransparent = pixel >>> 24 === 0;
|
|
1745
|
+
const colorKey = isTransparent ? transparentColor : pixel;
|
|
1746
|
+
let id = colorMap.get(colorKey);
|
|
1214
1747
|
if (id === void 0) {
|
|
1215
1748
|
id = colorMap.size;
|
|
1216
|
-
tempPalette.push(
|
|
1217
|
-
|
|
1218
|
-
tempPalette.push(b);
|
|
1219
|
-
tempPalette.push(a);
|
|
1220
|
-
colorMap.set(key, id);
|
|
1749
|
+
tempPalette.push(colorKey);
|
|
1750
|
+
colorMap.set(colorKey, id);
|
|
1221
1751
|
}
|
|
1222
1752
|
indexedData[i] = id;
|
|
1223
1753
|
}
|
|
1224
|
-
const palette = new
|
|
1754
|
+
const palette = new Int32Array(tempPalette);
|
|
1225
1755
|
return {
|
|
1226
1756
|
width,
|
|
1227
1757
|
height,
|
|
@@ -1443,7 +1973,7 @@ function mergeMasks(dst, dstWidth, src, opts) {
|
|
|
1443
1973
|
}
|
|
1444
1974
|
|
|
1445
1975
|
// src/PixelData/PixelData.ts
|
|
1446
|
-
var PixelData = class {
|
|
1976
|
+
var PixelData = class _PixelData {
|
|
1447
1977
|
constructor(imageData) {
|
|
1448
1978
|
this.imageData = imageData;
|
|
1449
1979
|
this.width = imageData.width;
|
|
@@ -1451,12 +1981,22 @@ var PixelData = class {
|
|
|
1451
1981
|
this.data32 = new Uint32Array(
|
|
1452
1982
|
imageData.data.buffer,
|
|
1453
1983
|
imageData.data.byteOffset,
|
|
1984
|
+
// Shift right by 2 is a fast bitwise division by 4.
|
|
1454
1985
|
imageData.data.byteLength >> 2
|
|
1455
1986
|
);
|
|
1456
1987
|
}
|
|
1457
1988
|
data32;
|
|
1458
1989
|
width;
|
|
1459
1990
|
height;
|
|
1991
|
+
copy() {
|
|
1992
|
+
const buffer = new Uint8ClampedArray(this.data32.buffer.slice(0));
|
|
1993
|
+
const imageData = {
|
|
1994
|
+
data: buffer,
|
|
1995
|
+
width: this.width,
|
|
1996
|
+
height: this.height
|
|
1997
|
+
};
|
|
1998
|
+
return new _PixelData(imageData);
|
|
1999
|
+
}
|
|
1460
2000
|
};
|
|
1461
2001
|
|
|
1462
2002
|
// src/PixelData/applyMaskToPixelData.ts
|
|
@@ -1554,7 +2094,7 @@ function blendColorPixelData(dst, color, opts) {
|
|
|
1554
2094
|
w: width = dst.width,
|
|
1555
2095
|
h: height = dst.height,
|
|
1556
2096
|
alpha: globalAlpha = 255,
|
|
1557
|
-
blendFn =
|
|
2097
|
+
blendFn = FAST_BLEND_MODES[1 /* sourceOver */],
|
|
1558
2098
|
mask,
|
|
1559
2099
|
maskType = 0 /* ALPHA */,
|
|
1560
2100
|
mw,
|
|
@@ -1663,7 +2203,7 @@ function blendPixelData(dst, src, opts) {
|
|
|
1663
2203
|
w: width = src.width,
|
|
1664
2204
|
h: height = src.height,
|
|
1665
2205
|
alpha: globalAlpha = 255,
|
|
1666
|
-
blendFn =
|
|
2206
|
+
blendFn = FAST_BLEND_MODES[1 /* sourceOver */],
|
|
1667
2207
|
mask,
|
|
1668
2208
|
maskType = 0 /* ALPHA */,
|
|
1669
2209
|
mw,
|
|
@@ -1854,10 +2394,17 @@ function invertPixelData(pixelData) {
|
|
|
1854
2394
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1855
2395
|
0 && (module.exports = {
|
|
1856
2396
|
BlendMode,
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
2397
|
+
FAST_BLENDER_REGISTRY,
|
|
2398
|
+
FAST_BLEND_MODES,
|
|
2399
|
+
FAST_BLEND_MODE_BY_NAME,
|
|
2400
|
+
FAST_BLEND_TO_INDEX,
|
|
2401
|
+
INDEX_TO_FAST_BLEND,
|
|
2402
|
+
INDEX_TO_PERFECT_BLEND,
|
|
1860
2403
|
MaskType,
|
|
2404
|
+
PERFECT_BLENDER_REGISTRY,
|
|
2405
|
+
PERFECT_BLEND_MODES,
|
|
2406
|
+
PERFECT_BLEND_MODE_BY_NAME,
|
|
2407
|
+
PERFECT_BLEND_TO_INDEX,
|
|
1861
2408
|
PixelData,
|
|
1862
2409
|
UnsupportedFormatError,
|
|
1863
2410
|
applyMaskToPixelData,
|
|
@@ -1868,20 +2415,27 @@ function invertPixelData(pixelData) {
|
|
|
1868
2415
|
clearPixelData,
|
|
1869
2416
|
color32ToCssRGBA,
|
|
1870
2417
|
color32ToHex,
|
|
1871
|
-
|
|
2418
|
+
colorBurnFast,
|
|
2419
|
+
colorBurnPerfect,
|
|
1872
2420
|
colorDistance,
|
|
1873
|
-
|
|
2421
|
+
colorDodgeFast,
|
|
2422
|
+
colorDodgePerfect,
|
|
1874
2423
|
copyImageData,
|
|
1875
2424
|
copyImageDataLike,
|
|
1876
2425
|
copyMask,
|
|
1877
|
-
|
|
1878
|
-
|
|
2426
|
+
darkenFast,
|
|
2427
|
+
darkenPerfect,
|
|
2428
|
+
darkerFast,
|
|
2429
|
+
darkerPerfect,
|
|
1879
2430
|
deserializeImageData,
|
|
1880
2431
|
deserializeNullableImageData,
|
|
1881
2432
|
deserializeRawImageData,
|
|
1882
|
-
|
|
1883
|
-
|
|
1884
|
-
|
|
2433
|
+
differenceFast,
|
|
2434
|
+
differencePerfect,
|
|
2435
|
+
divideFast,
|
|
2436
|
+
dividePerfect,
|
|
2437
|
+
exclusionFast,
|
|
2438
|
+
exclusionPerfect,
|
|
1885
2439
|
extractImageDataPixels,
|
|
1886
2440
|
extractMask,
|
|
1887
2441
|
fileInputChangeToImageData,
|
|
@@ -1890,8 +2444,10 @@ function invertPixelData(pixelData) {
|
|
|
1890
2444
|
floodFillSelection,
|
|
1891
2445
|
getImageDataFromClipboard,
|
|
1892
2446
|
getSupportedPixelFormats,
|
|
1893
|
-
|
|
1894
|
-
|
|
2447
|
+
hardLightFast,
|
|
2448
|
+
hardLightPerfect,
|
|
2449
|
+
hardMixFast,
|
|
2450
|
+
hardMixPerfect,
|
|
1895
2451
|
imageDataToAlphaMask,
|
|
1896
2452
|
imageDataToDataUrl,
|
|
1897
2453
|
imageDataToImgBlob,
|
|
@@ -1903,29 +2459,42 @@ function invertPixelData(pixelData) {
|
|
|
1903
2459
|
invertPixelData,
|
|
1904
2460
|
lerpColor32,
|
|
1905
2461
|
lerpColor32Fast,
|
|
1906
|
-
|
|
1907
|
-
|
|
1908
|
-
|
|
1909
|
-
|
|
1910
|
-
|
|
2462
|
+
lightenFast,
|
|
2463
|
+
lightenPerfect,
|
|
2464
|
+
lighterFast,
|
|
2465
|
+
lighterPerfect,
|
|
2466
|
+
linearBurnFast,
|
|
2467
|
+
linearBurnPerfect,
|
|
2468
|
+
linearDodgeFast,
|
|
2469
|
+
linearDodgePerfect,
|
|
2470
|
+
linearLightFast,
|
|
2471
|
+
linearLightPerfect,
|
|
1911
2472
|
makeIndexedImage,
|
|
1912
2473
|
makePixelCanvas,
|
|
1913
2474
|
makeReusableCanvas,
|
|
1914
2475
|
mergeMasks,
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
2476
|
+
multiplyFast,
|
|
2477
|
+
multiplyPerfect,
|
|
2478
|
+
overlayFast,
|
|
2479
|
+
overlayPerfect,
|
|
2480
|
+
overwriteFast,
|
|
2481
|
+
overwritePerfect,
|
|
1918
2482
|
packColor,
|
|
1919
2483
|
packRGBA,
|
|
1920
|
-
|
|
2484
|
+
pinLightFast,
|
|
2485
|
+
pinLightPerfect,
|
|
1921
2486
|
pixelDataToAlphaMask,
|
|
1922
2487
|
resizeImageData,
|
|
1923
|
-
|
|
2488
|
+
screenFast,
|
|
2489
|
+
screenPerfect,
|
|
1924
2490
|
serializeImageData,
|
|
1925
2491
|
serializeNullableImageData,
|
|
1926
|
-
|
|
1927
|
-
|
|
1928
|
-
|
|
2492
|
+
softLightFast,
|
|
2493
|
+
softLightPerfect,
|
|
2494
|
+
sourceOverFast,
|
|
2495
|
+
sourceOverPerfect,
|
|
2496
|
+
subtractFast,
|
|
2497
|
+
subtractPerfect,
|
|
1929
2498
|
trimRectBounds,
|
|
1930
2499
|
unpackAlpha,
|
|
1931
2500
|
unpackBlue,
|
|
@@ -1933,7 +2502,8 @@ function invertPixelData(pixelData) {
|
|
|
1933
2502
|
unpackColorTo,
|
|
1934
2503
|
unpackGreen,
|
|
1935
2504
|
unpackRed,
|
|
1936
|
-
|
|
2505
|
+
vividLightFast,
|
|
2506
|
+
vividLightPerfect,
|
|
1937
2507
|
writeImageDataPixels,
|
|
1938
2508
|
writeImageDataToClipboard,
|
|
1939
2509
|
writeImgBlobToClipboard
|