image-js 0.35.1 → 0.35.3
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/index.d.ts +99 -35
- package/lib/browser/environment.js +0 -6
- package/lib/browser/worker/extend.js +0 -3
- package/lib/browser/worker/process/background.js +0 -12
- package/lib/browser/worker/worker.js +0 -17
- package/lib/image/Image.js +18 -51
- package/lib/image/compute/colorHistogram.js +0 -8
- package/lib/image/compute/countAlphaPixels.js +0 -3
- package/lib/image/compute/extendedPoints.js +2 -7
- package/lib/image/compute/histogram.js +6 -25
- package/lib/image/compute/localMaxima.js +2 -10
- package/lib/image/compute/max.js +0 -5
- package/lib/image/compute/mean.js +0 -4
- package/lib/image/compute/median.js +0 -4
- package/lib/image/compute/min.js +0 -5
- package/lib/image/compute/minimalBoundingRectangle.js +5 -18
- package/lib/image/compute/moment.js +0 -3
- package/lib/image/compute/monotoneChainConvexHull.js +0 -3
- package/lib/image/compute/points.js +0 -3
- package/lib/image/compute/relativePosition.js +2 -8
- package/lib/image/compute/sum.js +0 -5
- package/lib/image/core/bitMethods.js +0 -11
- package/lib/image/core/checkProcessable.js +0 -13
- package/lib/image/core/environment.js +0 -8
- package/lib/image/core/export.js +0 -38
- package/lib/image/core/extend.js +0 -13
- package/lib/image/core/getRGBAData.js +0 -15
- package/lib/image/core/kind.js +4 -28
- package/lib/image/core/kindNames.js +1 -0
- package/lib/image/core/load.js +1 -53
- package/lib/image/core/mediaTypes.js +0 -2
- package/lib/image/core/valueMethods.js +0 -13
- package/lib/image/extend.js +7 -83
- package/lib/image/filter/abs.js +0 -3
- package/lib/image/filter/add.js +2 -8
- package/lib/image/filter/background.js +0 -9
- package/lib/image/filter/blurFilter.js +0 -6
- package/lib/image/filter/divide.js +0 -8
- package/lib/image/filter/flipX.js +0 -5
- package/lib/image/filter/flipY.js +0 -4
- package/lib/image/filter/gaussianFilter.js +0 -5
- package/lib/image/filter/gradientFilter.js +0 -10
- package/lib/image/filter/hypotenuse.js +0 -13
- package/lib/image/filter/invert.js +0 -9
- package/lib/image/filter/level.js +1 -19
- package/lib/image/filter/medianFilter.js +0 -15
- package/lib/image/filter/multiply.js +0 -10
- package/lib/image/filter/scharrFilter.js +0 -4
- package/lib/image/filter/sobelFilter.js +0 -4
- package/lib/image/filter/subtract.js +0 -8
- package/lib/image/filter/subtractImage.js +0 -10
- package/lib/image/internal/checks.js +1 -9
- package/lib/image/internal/clamp.js +0 -1
- package/lib/image/internal/copy.js +0 -2
- package/lib/image/internal/copyAlphaChannel.js +0 -1
- package/lib/image/internal/getImageParameters.js +0 -1
- package/lib/image/internal/getOutputImage.js +1 -13
- package/lib/image/model/model.js +1 -1
- package/lib/image/morphology/blackHat.js +0 -5
- package/lib/image/morphology/close.js +0 -5
- package/lib/image/morphology/dilate.js +0 -40
- package/lib/image/morphology/erode.js +0 -40
- package/lib/image/morphology/morphologicalGradient.js +0 -5
- package/lib/image/morphology/open.js +0 -5
- package/lib/image/morphology/topHat.js +0 -5
- package/lib/image/operator/cannyEdge.js +0 -3
- package/lib/image/operator/convolution.js +9 -34
- package/lib/image/operator/convolutionSeparable.js +0 -10
- package/lib/image/operator/extract.js +4 -13
- package/lib/image/operator/floodFill.js +2 -15
- package/lib/image/operator/getSeparatedKernel.js +0 -2
- package/lib/image/operator/paintLabels.js +8 -19
- package/lib/image/operator/paintMasks.js +2 -12
- package/lib/image/operator/paintPoints.js +0 -9
- package/lib/image/operator/paintPolygon.js +1 -15
- package/lib/image/operator/paintPolygons.js +2 -6
- package/lib/image/operator/paintPolyline.js +0 -7
- package/lib/image/operator/paintPolylines.js +1 -5
- package/lib/image/roi/Roi.js +27 -207
- package/lib/image/roi/RoiLayer.js +1 -22
- package/lib/image/roi/RoiMap.js +5 -38
- package/lib/image/roi/creator/fromMask.js +4 -22
- package/lib/image/roi/creator/fromMaskConnectedComponentLabelingAlgorithm.js +2 -20
- package/lib/image/roi/creator/fromMaxima.js +10 -43
- package/lib/image/roi/creator/fromPoints.js +2 -10
- package/lib/image/roi/creator/fromWaterShed.js +6 -17
- package/lib/image/roi/feretDiameters.js +9 -21
- package/lib/image/roi/manager.js +30 -119
- package/lib/image/roi/util/commonBorderLength.js +5 -16
- package/lib/image/roi/util/mergeRoi.js +2 -21
- package/lib/image/transform/cmyk.js +0 -9
- package/lib/image/transform/colorDepth.js +0 -12
- package/lib/image/transform/crop.js +0 -20
- package/lib/image/transform/cropAlpha.js +0 -11
- package/lib/image/transform/grey.js +0 -16
- package/lib/image/transform/greyAlgorithms.js +1 -24
- package/lib/image/transform/hsl.js +0 -16
- package/lib/image/transform/hsv.js +0 -15
- package/lib/image/transform/insert.js +0 -6
- package/lib/image/transform/mask/huang.js +3 -18
- package/lib/image/transform/mask/intermodes.js +3 -14
- package/lib/image/transform/mask/isodata.js +0 -14
- package/lib/image/transform/mask/li.js +12 -42
- package/lib/image/transform/mask/mask.js +1 -13
- package/lib/image/transform/mask/maxEntropy.js +8 -25
- package/lib/image/transform/mask/mean.js +1 -3
- package/lib/image/transform/mask/minError.js +10 -21
- package/lib/image/transform/mask/minimum.js +0 -20
- package/lib/image/transform/mask/moments.js +4 -17
- package/lib/image/transform/mask/otsu.js +1 -7
- package/lib/image/transform/mask/percentile.js +0 -8
- package/lib/image/transform/mask/renyiEntropy.js +8 -34
- package/lib/image/transform/mask/shanbhag.js +8 -25
- package/lib/image/transform/mask/thresholdAlgorithms.js +1 -17
- package/lib/image/transform/mask/triangle.js +13 -29
- package/lib/image/transform/mask/yen.js +2 -14
- package/lib/image/transform/pad.js +0 -20
- package/lib/image/transform/resize/nearestNeighbor.js +0 -6
- package/lib/image/transform/resize/resize.js +0 -16
- package/lib/image/transform/rgba.js +0 -9
- package/lib/image/transform/rgba8.js +0 -3
- package/lib/image/transform/rotate.js +0 -29
- package/lib/image/transform/rotateFree.js +0 -31
- package/lib/image/transform/warping.js +2 -35
- package/lib/image/utility/combineChannels.js +0 -11
- package/lib/image/utility/getBestMatch.js +2 -13
- package/lib/image/utility/getChannel.js +0 -10
- package/lib/image/utility/getClosestCommonParent.js +6 -23
- package/lib/image/utility/getColumn.js +0 -4
- package/lib/image/utility/getIntersection.js +2 -18
- package/lib/image/utility/getMatrix.js +0 -7
- package/lib/image/utility/getPixelsArray.js +0 -5
- package/lib/image/utility/getPixelsGrid.js +0 -11
- package/lib/image/utility/getRow.js +0 -4
- package/lib/image/utility/getSimilarity.js +3 -17
- package/lib/image/utility/getThreshold.js +0 -4
- package/lib/image/utility/setBorder.js +0 -16
- package/lib/image/utility/setChannel.js +0 -6
- package/lib/image/utility/setMatrix.js +0 -6
- package/lib/image/utility/split.js +2 -15
- package/lib/index.js +0 -12
- package/lib/kernel/kernel.js +0 -3
- package/lib/kernel/laplacianOfGaussian.js +1 -7
- package/lib/node_modules/test/binary.js +0 -3
- package/lib/node_modules/test/oneRoi.js +0 -2
- package/lib/stack/Stack.js +2 -35
- package/lib/stack/compute/histogram.js +0 -4
- package/lib/stack/compute/histograms.js +0 -4
- package/lib/stack/compute/max.js +0 -3
- package/lib/stack/compute/median.js +0 -4
- package/lib/stack/compute/min.js +0 -3
- package/lib/stack/extend.js +1 -11
- package/lib/stack/transform/matchAndCrop.js +6 -19
- package/lib/stack/utility/averageImage.js +0 -9
- package/lib/stack/utility/maxImage.js +0 -7
- package/lib/stack/utility/minImage.js +0 -7
- package/lib/util/Shape.js +3 -40
- package/lib/util/base64.js +3 -14
- package/lib/util/channel.js +1 -35
- package/lib/util/color.js +1 -25
- package/lib/util/converter.js +1 -13
- package/lib/util/deepValue.js +0 -3
- package/lib/util/histogram.js +1 -12
- package/lib/util/kernel.js +2 -12
- package/lib/util/matrix.js +0 -13
- package/lib/util/points.js +12 -35
- package/lib/util/value.js +0 -7
- package/lib/util/zerosMatrix.js +0 -3
- package/package.json +2 -2
- package/src/image/operator/paintLabels.js +6 -6
- package/src/image/operator/paintPolygon.js +1 -1
- package/src/image/operator/paintPolygons.js +2 -2
- package/src/image/operator/paintPolylines.js +1 -1
|
@@ -18,19 +18,15 @@ Object.defineProperty(exports, "writeFile", {
|
|
|
18
18
|
return _fs.writeFile;
|
|
19
19
|
}
|
|
20
20
|
});
|
|
21
|
-
|
|
22
21
|
var _fs = require("fs");
|
|
23
|
-
|
|
24
22
|
const message = 'requires the canvas library. Install it with `npm install canvas@next`.';
|
|
25
23
|
let createCanvas, DOMImage, ImageData;
|
|
26
24
|
exports.ImageData = ImageData;
|
|
27
25
|
exports.DOMImage = DOMImage;
|
|
28
26
|
exports.createCanvas = createCanvas;
|
|
29
|
-
|
|
30
27
|
try {
|
|
31
28
|
// eslint-disable-next-line import/no-unresolved
|
|
32
29
|
const canvas = require('canvas');
|
|
33
|
-
|
|
34
30
|
exports.createCanvas = createCanvas = canvas.createCanvas;
|
|
35
31
|
exports.DOMImage = DOMImage = canvas.Image;
|
|
36
32
|
exports.ImageData = ImageData = canvas.ImageData;
|
|
@@ -38,19 +34,15 @@ try {
|
|
|
38
34
|
exports.createCanvas = createCanvas = function () {
|
|
39
35
|
throw new Error(`createCanvas ${message}`);
|
|
40
36
|
};
|
|
41
|
-
|
|
42
37
|
exports.DOMImage = DOMImage = function () {
|
|
43
38
|
throw new Error(`DOMImage ${message}`);
|
|
44
39
|
};
|
|
45
|
-
|
|
46
40
|
exports.ImageData = ImageData = function () {
|
|
47
41
|
throw new Error(`ImageData ${message}`);
|
|
48
42
|
};
|
|
49
43
|
}
|
|
50
|
-
|
|
51
44
|
const env = 'node';
|
|
52
45
|
exports.env = env;
|
|
53
|
-
|
|
54
46
|
function fetchBinary(path) {
|
|
55
47
|
return new Promise(function (resolve, reject) {
|
|
56
48
|
(0, _fs.readFile)(path, function (err, data) {
|
package/lib/image/core/export.js
CHANGED
|
@@ -4,21 +4,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = setExportMethods;
|
|
7
|
-
|
|
8
7
|
var _blobUtil = require("blob-util");
|
|
9
|
-
|
|
10
8
|
var _fastBmp = require("fast-bmp");
|
|
11
|
-
|
|
12
9
|
var _fastPng = require("fast-png");
|
|
13
|
-
|
|
14
10
|
var _jpegJs = require("jpeg-js");
|
|
15
|
-
|
|
16
11
|
var _base = require("../../util/base64");
|
|
17
|
-
|
|
18
12
|
var _environment = require("./environment");
|
|
19
|
-
|
|
20
13
|
var _mediaTypes = require("./mediaTypes");
|
|
21
|
-
|
|
22
14
|
function encodeJpeg(image, options = {}) {
|
|
23
15
|
const data = {
|
|
24
16
|
width: image.width,
|
|
@@ -27,7 +19,6 @@ function encodeJpeg(image, options = {}) {
|
|
|
27
19
|
};
|
|
28
20
|
return (0, _jpegJs.encode)(data, options.quality).data;
|
|
29
21
|
}
|
|
30
|
-
|
|
31
22
|
function encodePng(image, options) {
|
|
32
23
|
const data = {
|
|
33
24
|
width: image.width,
|
|
@@ -36,16 +27,13 @@ function encodePng(image, options) {
|
|
|
36
27
|
depth: image.bitDepth,
|
|
37
28
|
data: image.data
|
|
38
29
|
};
|
|
39
|
-
|
|
40
30
|
if (data.depth === 1 || data.depth === 32) {
|
|
41
31
|
data.depth = 8;
|
|
42
32
|
data.channels = 4;
|
|
43
33
|
data.data = image.getRGBAData();
|
|
44
34
|
}
|
|
45
|
-
|
|
46
35
|
return (0, _fastPng.encode)(data, options);
|
|
47
36
|
}
|
|
48
|
-
|
|
49
37
|
const exportMethods = {
|
|
50
38
|
/**
|
|
51
39
|
* Save the image to disk (Node.js only)
|
|
@@ -66,23 +54,18 @@ const exportMethods = {
|
|
|
66
54
|
let {
|
|
67
55
|
format
|
|
68
56
|
} = options;
|
|
69
|
-
|
|
70
57
|
if (!format) {
|
|
71
58
|
// try to infer format from filename
|
|
72
59
|
const m = /\.(?<format>[a-zA-Z]+)$/.exec(path);
|
|
73
|
-
|
|
74
60
|
if (m) {
|
|
75
61
|
format = m.groups.format.toLowerCase();
|
|
76
62
|
}
|
|
77
63
|
}
|
|
78
|
-
|
|
79
64
|
if (!format) {
|
|
80
65
|
throw new Error('file format not provided');
|
|
81
66
|
}
|
|
82
|
-
|
|
83
67
|
return new Promise((resolve, reject) => {
|
|
84
68
|
let stream, buffer;
|
|
85
|
-
|
|
86
69
|
switch (format.toLowerCase()) {
|
|
87
70
|
case 'png':
|
|
88
71
|
{
|
|
@@ -91,10 +74,8 @@ const exportMethods = {
|
|
|
91
74
|
} else {
|
|
92
75
|
buffer = encodePng(this, encoderOptions);
|
|
93
76
|
}
|
|
94
|
-
|
|
95
77
|
break;
|
|
96
78
|
}
|
|
97
|
-
|
|
98
79
|
case 'jpg':
|
|
99
80
|
case 'jpeg':
|
|
100
81
|
if (useCanvas) {
|
|
@@ -102,17 +83,13 @@ const exportMethods = {
|
|
|
102
83
|
} else {
|
|
103
84
|
buffer = encodeJpeg(this, encoderOptions);
|
|
104
85
|
}
|
|
105
|
-
|
|
106
86
|
break;
|
|
107
|
-
|
|
108
87
|
case 'bmp':
|
|
109
88
|
buffer = (0, _fastBmp.encode)(this, encoderOptions);
|
|
110
89
|
break;
|
|
111
|
-
|
|
112
90
|
default:
|
|
113
91
|
throw new RangeError(`invalid output format: ${format}`);
|
|
114
92
|
}
|
|
115
|
-
|
|
116
93
|
if (stream) {
|
|
117
94
|
let out = (0, _environment.createWriteStream)(path);
|
|
118
95
|
out.on('finish', resolve);
|
|
@@ -124,13 +101,11 @@ const exportMethods = {
|
|
|
124
101
|
reject(err);
|
|
125
102
|
return;
|
|
126
103
|
}
|
|
127
|
-
|
|
128
104
|
resolve();
|
|
129
105
|
});
|
|
130
106
|
}
|
|
131
107
|
});
|
|
132
108
|
},
|
|
133
|
-
|
|
134
109
|
/**
|
|
135
110
|
* Creates a dataURL string from the image.
|
|
136
111
|
* @memberof Image
|
|
@@ -146,18 +121,15 @@ const exportMethods = {
|
|
|
146
121
|
options = type;
|
|
147
122
|
type = 'image/png';
|
|
148
123
|
}
|
|
149
|
-
|
|
150
124
|
const {
|
|
151
125
|
useCanvas = false,
|
|
152
126
|
encoder: encoderOptions = undefined
|
|
153
127
|
} = options;
|
|
154
128
|
type = (0, _mediaTypes.getType)(type);
|
|
155
|
-
|
|
156
129
|
function dataUrl(encoder, ctx) {
|
|
157
130
|
const u8 = encoder(ctx, encoderOptions);
|
|
158
131
|
return (0, _base.toBase64URL)(u8, type);
|
|
159
132
|
}
|
|
160
|
-
|
|
161
133
|
if (type === 'image/bmp') {
|
|
162
134
|
return dataUrl(_fastBmp.encode, this);
|
|
163
135
|
} else if (type === 'image/png' && !useCanvas) {
|
|
@@ -168,7 +140,6 @@ const exportMethods = {
|
|
|
168
140
|
return this.getCanvas().toDataURL(type);
|
|
169
141
|
}
|
|
170
142
|
},
|
|
171
|
-
|
|
172
143
|
/**
|
|
173
144
|
* Encodes the image and returns a buffer
|
|
174
145
|
* @memberof Image
|
|
@@ -183,23 +154,18 @@ const exportMethods = {
|
|
|
183
154
|
format = 'png',
|
|
184
155
|
encoder: encoderOptions = undefined
|
|
185
156
|
} = options;
|
|
186
|
-
|
|
187
157
|
switch (format.toLowerCase()) {
|
|
188
158
|
case 'png':
|
|
189
159
|
return encodePng(this, encoderOptions);
|
|
190
|
-
|
|
191
160
|
case 'jpeg':
|
|
192
161
|
case 'jpg':
|
|
193
162
|
return encodeJpeg(this, encoderOptions);
|
|
194
|
-
|
|
195
163
|
case 'bmp':
|
|
196
164
|
return (0, _fastBmp.encode)(this, encoderOptions);
|
|
197
|
-
|
|
198
165
|
default:
|
|
199
166
|
throw new RangeError(`invalid output format: ${format}`);
|
|
200
167
|
}
|
|
201
168
|
},
|
|
202
|
-
|
|
203
169
|
/**
|
|
204
170
|
* Creates a base64 string from the image.
|
|
205
171
|
* @memberof Image
|
|
@@ -218,7 +184,6 @@ const exportMethods = {
|
|
|
218
184
|
return dataURL.substring(dataURL.indexOf(',') + 1);
|
|
219
185
|
}
|
|
220
186
|
},
|
|
221
|
-
|
|
222
187
|
/**
|
|
223
188
|
* Creates a blob from the image and return a Promise.
|
|
224
189
|
* This function is only available in the browser.
|
|
@@ -231,7 +196,6 @@ const exportMethods = {
|
|
|
231
196
|
toBlob(type = 'image/png', quality = 0.8) {
|
|
232
197
|
return (0, _blobUtil.canvasToBlob)(this.getCanvas(), type, quality);
|
|
233
198
|
},
|
|
234
|
-
|
|
235
199
|
/**
|
|
236
200
|
* Creates a new canvas element and draw the image inside it
|
|
237
201
|
* @memberof Image
|
|
@@ -247,9 +211,7 @@ const exportMethods = {
|
|
|
247
211
|
ctx.putImageData(data, 0, 0);
|
|
248
212
|
return canvas;
|
|
249
213
|
}
|
|
250
|
-
|
|
251
214
|
};
|
|
252
|
-
|
|
253
215
|
function setExportMethods(Image) {
|
|
254
216
|
for (const i in exportMethods) {
|
|
255
217
|
Image.prototype[i] = exportMethods[i];
|
package/lib/image/core/extend.js
CHANGED
|
@@ -5,36 +5,28 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.extendMethod = extendMethod;
|
|
7
7
|
exports.extendProperty = extendProperty;
|
|
8
|
-
|
|
9
8
|
var _hasOwn = _interopRequireDefault(require("has-own"));
|
|
10
|
-
|
|
11
9
|
var _Image = _interopRequireDefault(require("../Image"));
|
|
12
|
-
|
|
13
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
14
|
-
|
|
15
11
|
let computedPropertyDescriptor = {
|
|
16
12
|
configurable: true,
|
|
17
13
|
enumerable: false,
|
|
18
14
|
get: undefined
|
|
19
15
|
};
|
|
20
|
-
|
|
21
16
|
function extendMethod(name, method, options = {}) {
|
|
22
17
|
let {
|
|
23
18
|
inPlace = false,
|
|
24
19
|
returnThis = true,
|
|
25
20
|
partialArgs = []
|
|
26
21
|
} = options;
|
|
27
|
-
|
|
28
22
|
if (inPlace) {
|
|
29
23
|
_Image.default.prototype[name] = function (...args) {
|
|
30
24
|
// remove computed properties
|
|
31
25
|
this.computed = null;
|
|
32
26
|
let result = method.apply(this, [...partialArgs, ...args]);
|
|
33
|
-
|
|
34
27
|
if (returnThis) {
|
|
35
28
|
return this;
|
|
36
29
|
}
|
|
37
|
-
|
|
38
30
|
return result;
|
|
39
31
|
};
|
|
40
32
|
} else {
|
|
@@ -42,27 +34,22 @@ function extendMethod(name, method, options = {}) {
|
|
|
42
34
|
return method.apply(this, [...partialArgs, ...args]);
|
|
43
35
|
};
|
|
44
36
|
}
|
|
45
|
-
|
|
46
37
|
return _Image.default;
|
|
47
38
|
}
|
|
48
|
-
|
|
49
39
|
function extendProperty(name, method, options = {}) {
|
|
50
40
|
let {
|
|
51
41
|
partialArgs = []
|
|
52
42
|
} = options;
|
|
53
|
-
|
|
54
43
|
computedPropertyDescriptor.get = function () {
|
|
55
44
|
if (this.computed === null) {
|
|
56
45
|
this.computed = {};
|
|
57
46
|
} else if ((0, _hasOwn.default)(name, this.computed)) {
|
|
58
47
|
return this.computed[name];
|
|
59
48
|
}
|
|
60
|
-
|
|
61
49
|
let result = method.apply(this, partialArgs);
|
|
62
50
|
this.computed[name] = result;
|
|
63
51
|
return result;
|
|
64
52
|
};
|
|
65
|
-
|
|
66
53
|
Object.defineProperty(_Image.default.prototype, name, computedPropertyDescriptor);
|
|
67
54
|
return _Image.default;
|
|
68
55
|
}
|
|
@@ -4,9 +4,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = getRGBAData;
|
|
7
|
-
|
|
8
7
|
var _model = require("../model/model");
|
|
9
|
-
|
|
10
8
|
/**
|
|
11
9
|
* Retrieve the data of the current image as RGBA 8 bits
|
|
12
10
|
* The source image may be:
|
|
@@ -29,14 +27,12 @@ function getRGBAData(options = {}) {
|
|
|
29
27
|
});
|
|
30
28
|
const arrayLength = this.width * this.height * 4;
|
|
31
29
|
let newData = clamped ? new Uint8ClampedArray(arrayLength) : new Uint8Array(arrayLength);
|
|
32
|
-
|
|
33
30
|
if (this.bitDepth === 1) {
|
|
34
31
|
fillDataFromBinary(this, newData);
|
|
35
32
|
} else if (this.bitDepth === 32) {
|
|
36
33
|
this.checkProcessable('getRGBAData', {
|
|
37
34
|
alpha: 0
|
|
38
35
|
});
|
|
39
|
-
|
|
40
36
|
if (this.components === 1) {
|
|
41
37
|
fillDataFromGrey32(this, newData);
|
|
42
38
|
} else if (this.components === 3) {
|
|
@@ -55,7 +51,6 @@ function getRGBAData(options = {}) {
|
|
|
55
51
|
fillDataFromRGB(this, newData);
|
|
56
52
|
}
|
|
57
53
|
}
|
|
58
|
-
|
|
59
54
|
if (this.alpha === 1) {
|
|
60
55
|
this.checkProcessable('getRGBAData', {
|
|
61
56
|
bitDepth: [8, 16]
|
|
@@ -64,10 +59,8 @@ function getRGBAData(options = {}) {
|
|
|
64
59
|
} else {
|
|
65
60
|
fillAlpha(this, newData);
|
|
66
61
|
}
|
|
67
|
-
|
|
68
62
|
return newData;
|
|
69
63
|
}
|
|
70
|
-
|
|
71
64
|
function fillDataFromBinary(image, newData) {
|
|
72
65
|
for (let i = 0; i < image.size; i++) {
|
|
73
66
|
const value = image.getBit(i);
|
|
@@ -76,12 +69,10 @@ function fillDataFromBinary(image, newData) {
|
|
|
76
69
|
newData[i * 4 + 2] = value * 255;
|
|
77
70
|
}
|
|
78
71
|
}
|
|
79
|
-
|
|
80
72
|
function fillDataFromGrey32(image, newData) {
|
|
81
73
|
const min = image.min[0];
|
|
82
74
|
const max = image.max[0];
|
|
83
75
|
const range = max - min;
|
|
84
|
-
|
|
85
76
|
for (let i = 0; i < image.size; i++) {
|
|
86
77
|
const val = Math.floor(255 * (image.data[i] - min) / range);
|
|
87
78
|
newData[i * 4] = val;
|
|
@@ -89,12 +80,10 @@ function fillDataFromGrey32(image, newData) {
|
|
|
89
80
|
newData[i * 4 + 2] = val;
|
|
90
81
|
}
|
|
91
82
|
}
|
|
92
|
-
|
|
93
83
|
function fillDataFromRGB32(image, newData) {
|
|
94
84
|
const min = Math.min(...image.min);
|
|
95
85
|
const max = Math.max(...image.max);
|
|
96
86
|
const range = max - min;
|
|
97
|
-
|
|
98
87
|
for (let i = 0; i < image.size; i++) {
|
|
99
88
|
const val1 = Math.floor(255 * (image.data[i * 3] - min) / range);
|
|
100
89
|
const val2 = Math.floor(255 * (image.data[i * 3 + 1] - min) / range);
|
|
@@ -104,7 +93,6 @@ function fillDataFromRGB32(image, newData) {
|
|
|
104
93
|
newData[i * 4 + 2] = val3;
|
|
105
94
|
}
|
|
106
95
|
}
|
|
107
|
-
|
|
108
96
|
function fillDataFromGrey(image, newData) {
|
|
109
97
|
for (let i = 0; i < image.size; i++) {
|
|
110
98
|
newData[i * 4] = image.data[i * image.channels] >>> image.bitDepth - 8;
|
|
@@ -112,7 +100,6 @@ function fillDataFromGrey(image, newData) {
|
|
|
112
100
|
newData[i * 4 + 2] = image.data[i * image.channels] >>> image.bitDepth - 8;
|
|
113
101
|
}
|
|
114
102
|
}
|
|
115
|
-
|
|
116
103
|
function fillDataFromRGB(image, newData) {
|
|
117
104
|
for (let i = 0; i < image.size; i++) {
|
|
118
105
|
newData[i * 4] = image.data[i * image.channels] >>> image.bitDepth - 8;
|
|
@@ -120,13 +107,11 @@ function fillDataFromRGB(image, newData) {
|
|
|
120
107
|
newData[i * 4 + 2] = image.data[i * image.channels + 2] >>> image.bitDepth - 8;
|
|
121
108
|
}
|
|
122
109
|
}
|
|
123
|
-
|
|
124
110
|
function copyAlpha(image, newData) {
|
|
125
111
|
for (let i = 0; i < image.size; i++) {
|
|
126
112
|
newData[i * 4 + 3] = image.data[i * image.channels + image.components] >> image.bitDepth - 8;
|
|
127
113
|
}
|
|
128
114
|
}
|
|
129
|
-
|
|
130
115
|
function fillAlpha(image, newData) {
|
|
131
116
|
for (let i = 0; i < image.size; i++) {
|
|
132
117
|
newData[i * 4 + 3] = 255;
|
package/lib/image/core/kind.js
CHANGED
|
@@ -7,15 +7,10 @@ exports.createPixelArray = createPixelArray;
|
|
|
7
7
|
exports.getKind = getKind;
|
|
8
8
|
exports.getTheoreticalPixelArraySize = getTheoreticalPixelArraySize;
|
|
9
9
|
exports.verifyKindDefinition = verifyKindDefinition;
|
|
10
|
-
|
|
11
10
|
var ColorModel = _interopRequireWildcard(require("../model/model"));
|
|
12
|
-
|
|
13
11
|
var Kind = _interopRequireWildcard(require("./kindNames"));
|
|
14
|
-
|
|
15
12
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
16
|
-
|
|
17
13
|
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
18
|
-
|
|
19
14
|
const kinds = {};
|
|
20
15
|
kinds[Kind.BINARY] = {
|
|
21
16
|
components: 1,
|
|
@@ -59,19 +54,14 @@ kinds[Kind.CMYKA] = {
|
|
|
59
54
|
bitDepth: 8,
|
|
60
55
|
colorModel: ColorModel.CMYK
|
|
61
56
|
};
|
|
62
|
-
|
|
63
57
|
function getKind(kind) {
|
|
64
58
|
const result = kinds[kind];
|
|
65
|
-
|
|
66
59
|
if (!result) {
|
|
67
60
|
throw new RangeError(`invalid image kind: ${kind}`);
|
|
68
61
|
}
|
|
69
|
-
|
|
70
62
|
return result;
|
|
71
63
|
}
|
|
72
|
-
|
|
73
64
|
const validBitDepth = [1, 8, 16, 32];
|
|
74
|
-
|
|
75
65
|
function verifyKindDefinition(definition) {
|
|
76
66
|
const {
|
|
77
67
|
components,
|
|
@@ -79,66 +69,52 @@ function verifyKindDefinition(definition) {
|
|
|
79
69
|
bitDepth,
|
|
80
70
|
colorModel
|
|
81
71
|
} = definition;
|
|
82
|
-
|
|
83
72
|
if (!Number.isInteger(components) || components <= 0) {
|
|
84
73
|
throw new RangeError(`invalid components: ${components}. Must be a positive integer`);
|
|
85
74
|
}
|
|
86
|
-
|
|
87
75
|
if (alpha !== 0 && alpha !== 1 && typeof alpha !== 'boolean') {
|
|
88
76
|
throw new TypeError(`invalid alpha: ${alpha}: must be a boolean, 0 or 1`);
|
|
89
77
|
}
|
|
90
|
-
|
|
91
78
|
if (!validBitDepth.includes(bitDepth)) {
|
|
92
79
|
throw new RangeError(`invalid bitDepth: ${bitDepth}. Must be one of ${validBitDepth.join(', ')}`);
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
|
|
80
|
+
}
|
|
81
|
+
// eslint-disable-next-line import/namespace
|
|
96
82
|
if (!ColorModel[colorModel]) {
|
|
97
83
|
throw new RangeError(`invalid colorModel: ${colorModel}. Must be one of ${Object.keys(ColorModel).join(', ')}`);
|
|
98
84
|
}
|
|
99
85
|
}
|
|
100
|
-
|
|
101
86
|
function getTheoreticalPixelArraySize(size, channels, bitDepth) {
|
|
102
87
|
let length = channels * size;
|
|
103
|
-
|
|
104
88
|
if (bitDepth === 1) {
|
|
105
89
|
length = Math.ceil(length / 8);
|
|
106
90
|
}
|
|
107
|
-
|
|
108
91
|
return length;
|
|
109
92
|
}
|
|
110
|
-
|
|
111
93
|
function createPixelArray(size, components, alpha, channels, bitDepth, maxValue) {
|
|
112
94
|
const length = channels * size;
|
|
113
95
|
let arr;
|
|
114
|
-
|
|
115
96
|
switch (bitDepth) {
|
|
116
97
|
case 1:
|
|
117
98
|
arr = new Uint8Array(Math.ceil(length / 8));
|
|
118
99
|
break;
|
|
119
|
-
|
|
120
100
|
case 8:
|
|
121
101
|
arr = new Uint8Array(length);
|
|
122
102
|
break;
|
|
123
|
-
|
|
124
103
|
case 16:
|
|
125
104
|
arr = new Uint16Array(length);
|
|
126
105
|
break;
|
|
127
|
-
|
|
128
106
|
case 32:
|
|
129
107
|
arr = new Float32Array(length);
|
|
130
108
|
break;
|
|
131
|
-
|
|
132
109
|
default:
|
|
133
110
|
throw new Error(`Cannot create pixel array for bit depth ${bitDepth}`);
|
|
134
|
-
}
|
|
135
|
-
|
|
111
|
+
}
|
|
136
112
|
|
|
113
|
+
// alpha channel is 100% by default
|
|
137
114
|
if (alpha) {
|
|
138
115
|
for (let i = components; i < arr.length; i += channels) {
|
|
139
116
|
arr[i] = maxValue;
|
|
140
117
|
}
|
|
141
118
|
}
|
|
142
|
-
|
|
143
119
|
return arr;
|
|
144
120
|
}
|
|
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.RGBA = exports.RGB = exports.GREYA = exports.GREY = exports.CMYKA = exports.CMYK = exports.BINARY = void 0;
|
|
7
7
|
// Shortcuts for common image kinds
|
|
8
|
+
|
|
8
9
|
const BINARY = 'BINARY';
|
|
9
10
|
exports.BINARY = BINARY;
|
|
10
11
|
const GREY = 'GREY';
|