image-js 1.0.0 → 1.2.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/image-js.esm.js +1041 -245
- package/dist/image-js.esm.js.map +1 -1
- package/dist/image-js.esm.min.js +2 -2
- package/dist/image-js.esm.min.js.map +1 -1
- package/dist/image-js.umd.js +1009 -211
- package/dist/image-js.umd.js.map +1 -1
- package/dist/image-js.umd.min.js +2 -2
- package/dist/image-js.umd.min.js.map +1 -1
- package/dist-types/image-js.d.ts +4 -5
- package/lib/Mask.d.ts +1 -1
- package/lib/Mask.js +1 -1
- package/lib/draw/drawLineOnImage.d.ts.map +1 -1
- package/lib/draw/drawLineOnImage.js.map +1 -1
- package/lib/extra/draw/draw_text.d.ts +47 -0
- package/lib/extra/draw/draw_text.d.ts.map +1 -0
- package/lib/extra/draw/draw_text.js +108 -0
- package/lib/extra/draw/draw_text.js.map +1 -0
- package/lib/extra/draw/index.d.ts +3 -0
- package/lib/extra/draw/index.d.ts.map +1 -0
- package/lib/extra/draw/index.js +3 -0
- package/lib/extra/draw/index.js.map +1 -0
- package/lib/{ssim → extra/ssim}/compute_dssim.d.ts +2 -2
- package/lib/extra/ssim/compute_dssim.d.ts.map +1 -0
- package/lib/{ssim → extra/ssim}/compute_dssim.js +1 -1
- package/lib/extra/ssim/compute_dssim.js.map +1 -0
- package/lib/{ssim → extra/ssim}/compute_ssim.d.ts +1 -1
- package/lib/extra/ssim/compute_ssim.d.ts.map +1 -0
- package/lib/{ssim → extra/ssim}/compute_ssim.js +2 -2
- package/lib/extra/ssim/compute_ssim.js.map +1 -0
- package/lib/extra/ssim/index.d.ts +3 -0
- package/lib/extra/ssim/index.d.ts.map +1 -0
- package/lib/extra/ssim/index.js +3 -0
- package/lib/extra/ssim/index.js.map +1 -0
- package/lib/featureMatching/matching/filterEuclideanDistance.d.ts.map +1 -1
- package/lib/featureMatching/matching/filterEuclideanDistance.js +6 -7
- package/lib/featureMatching/matching/filterEuclideanDistance.js.map +1 -1
- package/lib/featureMatching/matching/filterSmallestDistanceMatches.d.ts.map +1 -1
- package/lib/featureMatching/matching/filterSmallestDistanceMatches.js +6 -3
- package/lib/featureMatching/matching/filterSmallestDistanceMatches.js.map +1 -1
- package/lib/featureMatching/utils/sortByDistance.d.ts.map +1 -1
- package/lib/featureMatching/utils/sortByDistance.js +3 -1
- package/lib/featureMatching/utils/sortByDistance.js.map +1 -1
- package/lib/featureMatching/utils/sortBySourceDest.d.ts.map +1 -1
- package/lib/featureMatching/utils/sortBySourceDest.js +6 -2
- package/lib/featureMatching/utils/sortBySourceDest.js.map +1 -1
- package/lib/index_browser.d.ts +3 -0
- package/lib/index_browser.d.ts.map +1 -0
- package/lib/index_browser.js +5 -0
- package/lib/index_browser.js.map +1 -0
- package/lib/index_full.d.ts +4 -0
- package/lib/index_full.d.ts.map +1 -0
- package/lib/index_full.js +5 -0
- package/lib/index_full.js.map +1 -0
- package/lib/load/decode.d.ts.map +1 -1
- package/lib/load/decode.js +2 -0
- package/lib/load/decode.js.map +1 -1
- package/lib/load/decodeBmp.d.ts +8 -0
- package/lib/load/decodeBmp.d.ts.map +1 -0
- package/lib/load/decodeBmp.js +36 -0
- package/lib/load/decodeBmp.js.map +1 -0
- package/lib/load/decodePng.d.ts.map +1 -1
- package/lib/load/decodePng.js +29 -5
- package/lib/load/decodePng.js.map +1 -1
- package/lib/load/decodeTiff.d.ts.map +1 -1
- package/lib/load/decodeTiff.js +44 -21
- package/lib/load/decodeTiff.js.map +1 -1
- package/lib/load/read.d.ts +1 -1
- package/lib/load/read.js +1 -1
- package/lib/maskAnalysis/utils/getMbrAngle.d.ts.map +1 -1
- package/lib/maskAnalysis/utils/getMbrAngle.js +2 -1
- package/lib/maskAnalysis/utils/getMbrAngle.js.map +1 -1
- package/lib/maskAnalysis/utils/monotoneChainConvexHull.d.ts.map +1 -1
- package/lib/maskAnalysis/utils/monotoneChainConvexHull.js +2 -1
- package/lib/maskAnalysis/utils/monotoneChainConvexHull.js.map +1 -1
- package/lib/save/encodeBmp.d.ts +4 -4
- package/lib/save/encodeBmp.d.ts.map +1 -1
- package/lib/save/encodeBmp.js +22 -14
- package/lib/save/encodeBmp.js.map +1 -1
- package/lib/save/write.d.ts +1 -1
- package/lib/save/write.js +1 -1
- package/lib/stack/load/decodeApng.d.ts +8 -0
- package/lib/stack/load/decodeApng.d.ts.map +1 -0
- package/lib/stack/load/decodeApng.js +60 -0
- package/lib/stack/load/decodeApng.js.map +1 -0
- package/lib/stack/load/decodeStack.d.ts.map +1 -1
- package/lib/stack/load/decodeStack.js +2 -0
- package/lib/stack/load/decodeStack.js.map +1 -1
- package/lib/utils/cross_platform.d.ts +8 -0
- package/lib/utils/cross_platform.d.ts.map +1 -1
- package/lib/utils/cross_platform.js +34 -2
- package/lib/utils/cross_platform.js.map +1 -1
- package/lib/utils/geometry/points.d.ts.map +1 -1
- package/lib/utils/geometry/points.js +3 -1
- package/lib/utils/geometry/points.js.map +1 -1
- package/lib/utils/geometry/removeClosePoints.d.ts.map +1 -1
- package/lib/utils/geometry/removeClosePoints.js +2 -1
- package/lib/utils/geometry/removeClosePoints.js.map +1 -1
- package/lib/utils/setBlendedPixel.d.ts +1 -1
- package/lib/utils/setBlendedPixel.js +1 -1
- package/lib/utils/setBlendedVisiblePixel.d.ts +1 -1
- package/lib/utils/setBlendedVisiblePixel.js +1 -1
- package/package.json +43 -29
- package/src/Mask.ts +1 -1
- package/src/draw/drawLineOnImage.ts +0 -1
- package/src/extra/draw/draw_text.ts +194 -0
- package/src/extra/draw/index.ts +2 -0
- package/src/{ssim → extra/ssim}/compute_dssim.ts +3 -3
- package/src/{ssim → extra/ssim}/compute_ssim.ts +3 -3
- package/src/extra/ssim/index.ts +2 -0
- package/src/featureMatching/matching/filterEuclideanDistance.ts +6 -13
- package/src/featureMatching/matching/filterSmallestDistanceMatches.ts +6 -9
- package/src/featureMatching/utils/sortByDistance.ts +3 -1
- package/src/featureMatching/utils/sortBySourceDest.ts +6 -2
- package/src/index_browser.ts +4 -0
- package/src/index_full.ts +4 -0
- package/src/load/decode.ts +2 -1
- package/src/load/decodeBmp.ts +37 -0
- package/src/load/decodePng.ts +39 -7
- package/src/load/decodeTiff.ts +53 -22
- package/src/load/read.ts +1 -1
- package/src/maskAnalysis/utils/getMbrAngle.ts +2 -1
- package/src/maskAnalysis/utils/monotoneChainConvexHull.ts +2 -1
- package/src/save/encodeBmp.ts +22 -15
- package/src/save/write.ts +1 -1
- package/src/stack/load/decodeApng.ts +71 -0
- package/src/stack/load/decodeStack.ts +2 -0
- package/src/utils/cross_platform.ts +47 -4
- package/src/utils/geometry/points.ts +3 -1
- package/src/utils/geometry/removeClosePoints.ts +2 -1
- package/src/utils/setBlendedPixel.ts +1 -1
- package/src/utils/setBlendedVisiblePixel.ts +1 -1
- package/lib/ssim/compute_dssim.d.ts.map +0 -1
- package/lib/ssim/compute_dssim.js.map +0 -1
- package/lib/ssim/compute_ssim.d.ts.map +0 -1
- package/lib/ssim/compute_ssim.js.map +0 -1
- package/lib/ssim/index.d.ts +0 -3
- package/lib/ssim/index.d.ts.map +0 -1
- package/lib/ssim/index.js +0 -3
- package/lib/ssim/index.js.map +0 -1
- package/src/ssim/index.ts +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decodeBmp.js","sourceRoot":"","sources":["../../src/load/decodeBmp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAGlC;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,IAAgB;IACxC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,WAAW,CAAC,YAAY,KAAK,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE;YAC3D,IAAI,EAAE,WAAW,CAAC,IAAkB;SACrC,CAAC,CAAC;QACH,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;SAAM,CAAC;QACN,IAAI,UAA2B,CAAC;QAChC,QAAQ,WAAW,CAAC,QAAQ,EAAE,CAAC;YAC7B,KAAK,CAAC;gBACJ,UAAU,GAAG,MAAM,CAAC;gBACpB,MAAM;YACR,KAAK,CAAC;gBACJ,UAAU,GAAG,KAAK,CAAC;gBACnB,MAAM;YACR;gBACE,UAAU,GAAG,MAAM,CAAC;gBACpB,MAAM;QACV,CAAC;QACD,OAAO,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE;YACtD,UAAU;YACV,IAAI,EAAE,WAAW,CAAC,IAAkB;SACrC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decodePng.d.ts","sourceRoot":"","sources":["../../src/load/decodePng.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"decodePng.d.ts","sourceRoot":"","sources":["../../src/load/decodePng.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,CAoCnD"}
|
package/lib/load/decodePng.js
CHANGED
|
@@ -9,10 +9,16 @@ import { assert } from '../utils/validators/assert.js';
|
|
|
9
9
|
export function decodePng(buffer) {
|
|
10
10
|
const png = decode(buffer);
|
|
11
11
|
let colorModel;
|
|
12
|
-
const bitDepth = png.depth
|
|
12
|
+
const bitDepth = png.depth;
|
|
13
13
|
if (png.palette) {
|
|
14
14
|
return loadPalettePng(png);
|
|
15
15
|
}
|
|
16
|
+
if (bitDepth === 1) {
|
|
17
|
+
return new Image(png.width, png.height, {
|
|
18
|
+
data: decodeBinary(png),
|
|
19
|
+
colorModel: 'GREY',
|
|
20
|
+
});
|
|
21
|
+
}
|
|
16
22
|
switch (png.channels) {
|
|
17
23
|
case 1:
|
|
18
24
|
colorModel = 'GREY';
|
|
@@ -43,7 +49,7 @@ export function decodePng(buffer) {
|
|
|
43
49
|
function loadPalettePng(png) {
|
|
44
50
|
assert(png.palette);
|
|
45
51
|
const pixels = png.width * png.height;
|
|
46
|
-
const data = new Uint8Array(pixels *
|
|
52
|
+
const data = new Uint8Array(pixels * png.palette[0].length);
|
|
47
53
|
const pixelsPerByte = 8 / png.depth;
|
|
48
54
|
const factor = png.depth < 8 ? pixelsPerByte : 1;
|
|
49
55
|
const mask = Number.parseInt('1'.repeat(png.depth), 2);
|
|
@@ -57,12 +63,30 @@ function loadPalettePng(png) {
|
|
|
57
63
|
mask;
|
|
58
64
|
}
|
|
59
65
|
const paletteValue = png.palette[value];
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
66
|
+
for (const paletteChannel of paletteValue) {
|
|
67
|
+
data[dataIndex++] = paletteChannel;
|
|
68
|
+
}
|
|
63
69
|
}
|
|
64
70
|
return new Image(png.width, png.height, {
|
|
65
71
|
data,
|
|
72
|
+
colorModel: png.palette[0].length === 4 ? 'RGBA' : 'RGB',
|
|
66
73
|
});
|
|
67
74
|
}
|
|
75
|
+
function decodeBinary(png) {
|
|
76
|
+
const totalPixels = png.width * png.height;
|
|
77
|
+
const result = new Uint8Array(totalPixels);
|
|
78
|
+
const pngData = png.data;
|
|
79
|
+
const padding = png.width % 8;
|
|
80
|
+
const bytesPerLine = Math.ceil(png.width / 8);
|
|
81
|
+
let pixelIndex = 0;
|
|
82
|
+
for (let byteIndex = 0; byteIndex < pngData.length && pixelIndex < totalPixels; byteIndex++) {
|
|
83
|
+
const byte = pngData[byteIndex];
|
|
84
|
+
const limit = byteIndex % bytesPerLine === 0 ? 8 - padding : 0;
|
|
85
|
+
for (let bitIndex = 7; bitIndex >= limit && pixelIndex < totalPixels; bitIndex--) {
|
|
86
|
+
const bit = (byte >> bitIndex) & 1;
|
|
87
|
+
result[pixelIndex++] = bit * 255;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
return result;
|
|
91
|
+
}
|
|
68
92
|
//# sourceMappingURL=decodePng.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decodePng.js","sourceRoot":"","sources":["../../src/load/decodePng.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAGlC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AAEvD;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,MAAkB;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAE3B,IAAI,UAA2B,CAAC;IAChC,MAAM,QAAQ,GAAa,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"decodePng.js","sourceRoot":"","sources":["../../src/load/decodePng.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decodeTiff.d.ts","sourceRoot":"","sources":["../../src/load/decodeTiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"decodeTiff.d.ts","sourceRoot":"","sources":["../../src/load/decodeTiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAIpC,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,GAAG,KAAK,CAGpD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAqEnD"}
|
package/lib/load/decodeTiff.js
CHANGED
|
@@ -7,9 +7,8 @@ import { getMetadata } from './getMetadata.js';
|
|
|
7
7
|
* @returns The decoded image.
|
|
8
8
|
*/
|
|
9
9
|
export function decodeTiff(buffer) {
|
|
10
|
-
const result = decode(buffer);
|
|
10
|
+
const result = decode(buffer, { pages: [0] });
|
|
11
11
|
return getImageFromIFD(result[0]);
|
|
12
|
-
// TODO: optimize not to decode whole file
|
|
13
12
|
}
|
|
14
13
|
/**
|
|
15
14
|
* Create image from a single IFD.
|
|
@@ -17,39 +16,63 @@ export function decodeTiff(buffer) {
|
|
|
17
16
|
* @returns The decoded image.
|
|
18
17
|
*/
|
|
19
18
|
export function getImageFromIFD(ifd) {
|
|
19
|
+
if (ifd.data instanceof Float32Array || ifd.data instanceof Float64Array) {
|
|
20
|
+
throw new Error('Float TIFF data is not supported.');
|
|
21
|
+
}
|
|
20
22
|
if (ifd.type === 3) {
|
|
21
|
-
|
|
22
|
-
const
|
|
23
|
+
const hasAlpha = ifd.samplesPerPixel === 2;
|
|
24
|
+
const pixelLength = hasAlpha ? 4 : 3;
|
|
25
|
+
const data = new Uint16Array(pixelLength * ifd.width * ifd.height);
|
|
23
26
|
const palette = ifd.palette;
|
|
24
27
|
let ptr = 0;
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
if (hasAlpha) {
|
|
29
|
+
for (let index = 0; index < ifd.data.length; index += ifd.samplesPerPixel) {
|
|
30
|
+
const color = palette[ifd.data[index]];
|
|
31
|
+
data[ptr++] = color[0];
|
|
32
|
+
data[ptr++] = color[1];
|
|
33
|
+
data[ptr++] = color[2];
|
|
34
|
+
// To ensure that the value is 16 bits.
|
|
35
|
+
data[ptr++] = Math.round((ifd.data[index + 1] / 2 ** ifd.bitsPerSample) * 65535);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
for (let index = 0; index < ifd.data.length; index += ifd.samplesPerPixel) {
|
|
40
|
+
const color = palette[ifd.data[index]];
|
|
41
|
+
data[ptr++] = color[0];
|
|
42
|
+
data[ptr++] = color[1];
|
|
43
|
+
data[ptr++] = color[2];
|
|
44
|
+
}
|
|
30
45
|
}
|
|
31
46
|
return new Image(ifd.width, ifd.height, {
|
|
32
47
|
data,
|
|
33
|
-
|
|
34
|
-
colorModel: ifd.alpha ? 'RGBA' : 'RGB',
|
|
35
|
-
// TODO: handle other bit depths
|
|
48
|
+
colorModel: hasAlpha ? 'RGBA' : 'RGB',
|
|
36
49
|
bitDepth: 16,
|
|
37
50
|
meta: getMetadata(ifd),
|
|
38
51
|
});
|
|
39
52
|
}
|
|
53
|
+
else if (ifd.type === 1 || ifd.type === 0) {
|
|
54
|
+
if (ifd.bitsPerSample !== 1) {
|
|
55
|
+
return new Image(ifd.width, ifd.height, {
|
|
56
|
+
data: ifd.data,
|
|
57
|
+
bitDepth: ifd.bitsPerSample,
|
|
58
|
+
colorModel: ifd.alpha ? 'GREYA' : 'GREY',
|
|
59
|
+
meta: getMetadata(ifd),
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
else {
|
|
63
|
+
return new Image(ifd.width, ifd.height, {
|
|
64
|
+
data: ifd.data.map((pixel) => pixel * 255),
|
|
65
|
+
bitDepth: 8,
|
|
66
|
+
colorModel: 'GREY',
|
|
67
|
+
meta: getMetadata(ifd),
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
40
71
|
else {
|
|
41
72
|
return new Image(ifd.width, ifd.height, {
|
|
42
|
-
// TODO: handle float data
|
|
43
|
-
// @ts-expect-error float data not handled yet
|
|
44
73
|
data: ifd.data,
|
|
45
74
|
bitDepth: ifd.bitsPerSample,
|
|
46
|
-
colorModel: ifd.
|
|
47
|
-
? ifd.alpha
|
|
48
|
-
? 'RGBA'
|
|
49
|
-
: 'RGB'
|
|
50
|
-
: ifd.alpha
|
|
51
|
-
? 'GREYA'
|
|
52
|
-
: 'GREY',
|
|
75
|
+
colorModel: ifd.alpha ? 'RGBA' : 'RGB',
|
|
53
76
|
meta: getMetadata(ifd),
|
|
54
77
|
});
|
|
55
78
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decodeTiff.js","sourceRoot":"","sources":["../../src/load/decodeTiff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAG9B,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI/C;;;;GAIG;AACH,MAAM,UAAU,UAAU,CAAC,MAAkB;IAC3C,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"decodeTiff.js","sourceRoot":"","sources":["../../src/load/decodeTiff.ts"],"names":[],"mappings":"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"}
|
package/lib/load/read.d.ts
CHANGED
|
@@ -8,7 +8,7 @@ import type { Image } from '../Image.js';
|
|
|
8
8
|
*/
|
|
9
9
|
export declare function read(path: string | URL): Promise<Image>;
|
|
10
10
|
/**
|
|
11
|
-
* Synchronous version of
|
|
11
|
+
* Synchronous version of {@link read}.
|
|
12
12
|
* This method is only implemented for Node.js.
|
|
13
13
|
* @param path - The path to the image.
|
|
14
14
|
* @returns Image instance.
|
package/lib/load/read.js
CHANGED
|
@@ -13,7 +13,7 @@ export async function read(path) {
|
|
|
13
13
|
return decode(data);
|
|
14
14
|
}
|
|
15
15
|
/**
|
|
16
|
-
* Synchronous version of
|
|
16
|
+
* Synchronous version of {@link read}.
|
|
17
17
|
* This method is only implemented for Node.js.
|
|
18
18
|
* @param path - The path to the image.
|
|
19
19
|
* @returns Image instance.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getMbrAngle.d.ts","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/getMbrAngle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAUrD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,KAAK,EAAE,GAAG,MAAM,
|
|
1
|
+
{"version":3,"file":"getMbrAngle.d.ts","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/getMbrAngle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAUrD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,SAAS,KAAK,EAAE,GAAG,MAAM,CAUzD"}
|
|
@@ -8,7 +8,8 @@ const topFirst = (mbrPoint1, mbrPoint2) => mbrPoint1.row >= mbrPoint2.row ? -1 :
|
|
|
8
8
|
* @returns The angle in degrees.
|
|
9
9
|
*/
|
|
10
10
|
export function getMbrAngle(mbr) {
|
|
11
|
-
const sorted = mbr.slice()
|
|
11
|
+
const sorted = mbr.slice();
|
|
12
|
+
sorted.sort(leftFirst);
|
|
12
13
|
const left = sorted.slice(0, 2);
|
|
13
14
|
const right = sorted.slice(2, 4);
|
|
14
15
|
left.sort(topFirst);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"getMbrAngle.js","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/getMbrAngle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,SAAS,GAAG,CAAC,SAAgB,EAAE,SAAgB,EAAE,EAAE,CACvD,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,MAAM,QAAQ,GAAG,CAAC,SAAgB,EAAE,SAAgB,EAAE,EAAE,CACtD,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAqB;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"getMbrAngle.js","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/getMbrAngle.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE3D,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAEzC,MAAM,SAAS,GAAG,CAAC,SAAgB,EAAE,SAAgB,EAAE,EAAE,CACvD,SAAS,CAAC,MAAM,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChD,MAAM,QAAQ,GAAG,CAAC,SAAgB,EAAE,SAAgB,EAAE,EAAE,CACtD,SAAS,CAAC,GAAG,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,WAAW,CAAC,GAAqB;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;IAC3B,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACvB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1B,OAAO,CAAC,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monotoneChainConvexHull.d.ts","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/monotoneChainConvexHull.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D,UAAU,WAAW;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE,WAAgB,GACxB,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"monotoneChainConvexHull.d.ts","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/monotoneChainConvexHull.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gCAAgC,CAAC;AAE5D,UAAU,WAAW;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,KAAK,EAAE,EACf,OAAO,GAAE,WAAgB,GACxB,KAAK,EAAE,CA6BT"}
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
export function monotoneChainConvexHull(points, options = {}) {
|
|
9
9
|
const { sorted = false } = options;
|
|
10
10
|
if (!sorted) {
|
|
11
|
-
points = points.slice()
|
|
11
|
+
points = points.slice();
|
|
12
|
+
points.sort(byXThenY);
|
|
12
13
|
}
|
|
13
14
|
const n = points.length;
|
|
14
15
|
const result = new Array(n * 2);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"monotoneChainConvexHull.js","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/monotoneChainConvexHull.ts"],"names":[],"mappings":"AAUA;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAe,EACf,UAAuB,EAAE;IAEzB,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"monotoneChainConvexHull.js","sourceRoot":"","sources":["../../../src/maskAnalysis/utils/monotoneChainConvexHull.ts"],"names":[],"mappings":"AAUA;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAe,EACf,UAAuB,EAAE;IAEzB,MAAM,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IACnC,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IAChC,IAAI,CAAC,GAAG,CAAC,CAAC;IAEV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,CAAC,EAAE,CAAC;QACN,CAAC;QACD,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAChB,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,OAAO,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9D,CAAC,EAAE,CAAC;QACN,CAAC;QACD,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC;IACtB,CAAC;IAED,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AAChC,CAAC;AAED,SAAS,EAAE,CAAC,EAAS,EAAE,EAAS,EAAE,EAAS;IACzC,OAAO,CACL,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;QAC3C,CAAC,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAC5C,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,MAAa,EAAE,MAAa;IAC5C,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;QACpC,OAAO,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACjC,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AACvC,CAAC;AAED,wBAAwB"}
|
package/lib/save/encodeBmp.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { Mask } from '../Mask.js';
|
|
1
|
+
import { Image } from '../Image.js';
|
|
2
|
+
import type { Mask } from '../Mask.js';
|
|
3
3
|
/**
|
|
4
4
|
* Creates a BMP buffer from a mask.
|
|
5
|
-
* @param
|
|
5
|
+
* @param image - The mask instance.
|
|
6
6
|
* @returns The buffer.
|
|
7
7
|
*/
|
|
8
|
-
export declare function encodeBmp(
|
|
8
|
+
export declare function encodeBmp(image: Image | Mask): Uint8Array<ArrayBufferLike>;
|
|
9
9
|
//# sourceMappingURL=encodeBmp.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encodeBmp.d.ts","sourceRoot":"","sources":["../../src/save/encodeBmp.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"encodeBmp.d.ts","sourceRoot":"","sources":["../../src/save/encodeBmp.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,+BAoB5C"}
|
package/lib/save/encodeBmp.js
CHANGED
|
@@ -1,22 +1,30 @@
|
|
|
1
1
|
import * as bmp from 'fast-bmp';
|
|
2
|
-
import {
|
|
2
|
+
import { Image } from '../Image.js';
|
|
3
3
|
/**
|
|
4
4
|
* Creates a BMP buffer from a mask.
|
|
5
|
-
* @param
|
|
5
|
+
* @param image - The mask instance.
|
|
6
6
|
* @returns The buffer.
|
|
7
7
|
*/
|
|
8
|
-
export function encodeBmp(
|
|
9
|
-
if (
|
|
10
|
-
|
|
8
|
+
export function encodeBmp(image) {
|
|
9
|
+
if (image instanceof Image) {
|
|
10
|
+
return bmp.encode({
|
|
11
|
+
width: image.width,
|
|
12
|
+
height: image.height,
|
|
13
|
+
components: image.components,
|
|
14
|
+
bitsPerPixel: image.channels * image.bitDepth,
|
|
15
|
+
channels: image.channels,
|
|
16
|
+
data: image.getRawImage().data,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
else {
|
|
20
|
+
return bmp.encode({
|
|
21
|
+
width: image.width,
|
|
22
|
+
height: image.height,
|
|
23
|
+
components: 1,
|
|
24
|
+
bitsPerPixel: 1,
|
|
25
|
+
channels: 1,
|
|
26
|
+
data: image.getRawImage().data,
|
|
27
|
+
});
|
|
11
28
|
}
|
|
12
|
-
const imageData = mask.getRawImage();
|
|
13
|
-
return bmp.encode({
|
|
14
|
-
width: imageData.width,
|
|
15
|
-
height: imageData.height,
|
|
16
|
-
components: 1,
|
|
17
|
-
bitsPerPixel: 1,
|
|
18
|
-
channels: 1,
|
|
19
|
-
data: imageData.data,
|
|
20
|
-
});
|
|
21
29
|
}
|
|
22
30
|
//# sourceMappingURL=encodeBmp.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encodeBmp.js","sourceRoot":"","sources":["../../src/save/encodeBmp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"encodeBmp.js","sourceRoot":"","sources":["../../src/save/encodeBmp.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAEhC,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAGpC;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,KAAmB;IAC3C,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAC,MAAM,CAAC;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,YAAY,EAAE,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ;YAC7C,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI;SAC/B,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,CAAC,MAAM,CAAC;YAChB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,UAAU,EAAE,CAAC;YACb,YAAY,EAAE,CAAC;YACf,QAAQ,EAAE,CAAC;YACX,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,IAAI;SAC/B,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
|
package/lib/save/write.d.ts
CHANGED
|
@@ -52,7 +52,7 @@ export declare function write(path: string | URL, image: Image | Mask, options:
|
|
|
52
52
|
*/
|
|
53
53
|
export declare function write(path: string | URL, image: Mask, options?: WriteOptionsBmp): Promise<void>;
|
|
54
54
|
/**
|
|
55
|
-
* Synchronous version of
|
|
55
|
+
* Synchronous version of {@link write}.
|
|
56
56
|
* This method is only implemented for Node.js.
|
|
57
57
|
* @param path - Path where the image should be written.
|
|
58
58
|
* @param image - Image to save.
|
package/lib/save/write.js
CHANGED
|
@@ -24,7 +24,7 @@ export async function write(path, image, options) {
|
|
|
24
24
|
await nodeApi.fs.promises.writeFile(path, toWrite);
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
|
-
* Synchronous version of
|
|
27
|
+
* Synchronous version of {@link write}.
|
|
28
28
|
* This method is only implemented for Node.js.
|
|
29
29
|
* @param path - Path where the image should be written.
|
|
30
30
|
* @param image - Image to save.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decodeApng.d.ts","sourceRoot":"","sources":["../../../src/stack/load/decodeApng.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAGvC;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,UAAU,SAgDnD"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { decodeApng } from 'fast-png';
|
|
2
|
+
import { Image } from "../../Image.js";
|
|
3
|
+
import { Stack } from "../../Stack.js";
|
|
4
|
+
/**
|
|
5
|
+
* Decodes APNG image into a Stack
|
|
6
|
+
* @param data - APNG data.
|
|
7
|
+
* @returns stack of frames.
|
|
8
|
+
*/
|
|
9
|
+
export function decodeStackFromApng(data) {
|
|
10
|
+
const decodedApng = decodeApng(data);
|
|
11
|
+
const images = [];
|
|
12
|
+
let colorModel;
|
|
13
|
+
switch (decodedApng.channels) {
|
|
14
|
+
case 1:
|
|
15
|
+
if (decodedApng.palette) {
|
|
16
|
+
colorModel = decodedApng.palette[0].length === 3 ? 'RGB' : 'RGBA';
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
colorModel = 'GREY';
|
|
20
|
+
}
|
|
21
|
+
break;
|
|
22
|
+
case 2:
|
|
23
|
+
colorModel = 'GREYA';
|
|
24
|
+
break;
|
|
25
|
+
case 3:
|
|
26
|
+
colorModel = 'RGB';
|
|
27
|
+
break;
|
|
28
|
+
default:
|
|
29
|
+
colorModel = 'RGBA';
|
|
30
|
+
break;
|
|
31
|
+
}
|
|
32
|
+
if (decodedApng.palette) {
|
|
33
|
+
for (const image of decodedApng.frames) {
|
|
34
|
+
images.push(new Image(decodedApng.width, decodedApng.height, {
|
|
35
|
+
data: convertIndexedData(image.data, decodedApng.palette),
|
|
36
|
+
colorModel,
|
|
37
|
+
}));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else {
|
|
41
|
+
for (const image of decodedApng.frames) {
|
|
42
|
+
images.push(new Image(decodedApng.width, decodedApng.height, {
|
|
43
|
+
data: image.data,
|
|
44
|
+
colorModel,
|
|
45
|
+
}));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
const stack = new Stack(images);
|
|
49
|
+
return stack;
|
|
50
|
+
}
|
|
51
|
+
function convertIndexedData(data, palette) {
|
|
52
|
+
const result = new Uint8Array(data.length * palette[0].length);
|
|
53
|
+
for (let i = 0; i < data.length; i++) {
|
|
54
|
+
for (let channel = 0; channel < palette[0].length; channel++) {
|
|
55
|
+
result[i * palette[0].length + channel] = palette[data[i]][channel];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return result;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=decodeApng.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decodeApng.js","sourceRoot":"","sources":["../../../src/stack/load/decodeApng.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEtC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAGvC;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAgB;IAClD,MAAM,WAAW,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,MAAM,GAAY,EAAE,CAAC;IAC3B,IAAI,UAA2B,CAAC;IAChC,QAAQ,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC7B,KAAK,CAAC;YACJ,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;gBACxB,UAAU,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACN,UAAU,GAAG,MAAM,CAAC;YACtB,CAAC;YACD,MAAM;QACR,KAAK,CAAC;YACJ,UAAU,GAAG,OAAO,CAAC;YACrB,MAAM;QACR,KAAK,CAAC;YACJ,UAAU,GAAG,KAAK,CAAC;YACnB,MAAM;QACR;YACE,UAAU,GAAG,MAAM,CAAC;YACpB,MAAM;IACV,CAAC;IACD,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CACT,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE;gBAC/C,IAAI,EAAE,kBAAkB,CACtB,KAAK,CAAC,IAAkB,EACxB,WAAW,CAAC,OAAO,CACpB;gBACD,UAAU;aACX,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,MAAM,KAAK,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;YACvC,MAAM,CAAC,IAAI,CACT,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE;gBAC/C,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,UAAU;aACX,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;IAEhC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,kBAAkB,CAAC,IAAgB,EAAE,OAAsB;IAClE,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC;YAC7D,MAAM,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACtE,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decodeStack.d.ts","sourceRoot":"","sources":["../../../src/stack/load/decodeStack.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"decodeStack.d.ts","sourceRoot":"","sources":["../../../src/stack/load/decodeStack.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAK5C;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,KAAK,CAaxD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import imageType from 'image-type';
|
|
2
2
|
import { match } from 'ts-pattern';
|
|
3
|
+
import { decodeStackFromApng } from "./decodeApng.js";
|
|
3
4
|
import { decodeStackFromTiff } from './decodeTiff.js';
|
|
4
5
|
/**
|
|
5
6
|
* Decode input data and create stack. Data format is automatically detected.
|
|
@@ -12,6 +13,7 @@ export function decodeStack(data) {
|
|
|
12
13
|
const type = imageType(typedArray);
|
|
13
14
|
return match(type)
|
|
14
15
|
.with({ mime: 'image/tiff' }, () => decodeStackFromTiff(typedArray))
|
|
16
|
+
.with({ mime: 'image/png' }, () => decodeStackFromApng(typedArray))
|
|
15
17
|
.otherwise(() => {
|
|
16
18
|
throw new RangeError(`invalid data format: ${type?.mime}`);
|
|
17
19
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decodeStack.js","sourceRoot":"","sources":["../../../src/stack/load/decodeStack.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAInC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAqB;IAC/C,MAAM,UAAU,GAAG,IAAI,UAAU,CAC/B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,UAAU,CAChB,CAAC;IACF,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC;SACf,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;SACnE,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,IAAI,UAAU,CAAC,wBAAwB,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
1
|
+
{"version":3,"file":"decodeStack.js","sourceRoot":"","sources":["../../../src/stack/load/decodeStack.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAInC,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,IAAqB;IAC/C,MAAM,UAAU,GAAG,IAAI,UAAU,CAC/B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,UAAU,EACf,IAAI,CAAC,UAAU,CAChB,CAAC;IACF,MAAM,IAAI,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACnC,OAAO,KAAK,CAAC,IAAI,CAAC;SACf,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;SACnE,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,CAAC,mBAAmB,CAAC,UAAU,CAAC,CAAC;SAClE,SAAS,CAAC,GAAG,EAAE;QACd,MAAM,IAAI,UAAU,CAAC,wBAAwB,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { CanvasRenderingContext2D as SkiaCanvasRenderingContext2D } from 'skia-canvas';
|
|
1
2
|
/**
|
|
2
3
|
* Returns builtin Node.js modules or throws an error saying that the method is only implemented in Node.js.
|
|
3
4
|
* @param methodName - Name of the method that calls this function
|
|
@@ -8,4 +9,11 @@ export declare function getNodeApiOrThrow(methodName: string): {
|
|
|
8
9
|
path: import("path").PlatformPath;
|
|
9
10
|
url: typeof import("node:url");
|
|
10
11
|
};
|
|
12
|
+
/**
|
|
13
|
+
* Returns a 2D canvas context for rendering on the browser or Node.js.
|
|
14
|
+
* @param width - Width of the canvas.
|
|
15
|
+
* @param height - Height of the canvas.
|
|
16
|
+
* @returns The initialised canvas context.
|
|
17
|
+
*/
|
|
18
|
+
export declare function getCanvasContext(width: number, height: number): OffscreenCanvasRenderingContext2D | SkiaCanvasRenderingContext2D;
|
|
11
19
|
//# sourceMappingURL=cross_platform.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cross_platform.d.ts","sourceRoot":"","sources":["../../src/utils/cross_platform.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM;;;;
|
|
1
|
+
{"version":3,"file":"cross_platform.d.ts","sourceRoot":"","sources":["../../src/utils/cross_platform.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,wBAAwB,IAAI,4BAA4B,EACzD,MAAM,aAAa,CAAC;AAErB;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM;;;;EASnD;AAKD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,iCAAiC,GAAG,4BAA4B,CAYlE"}
|
|
@@ -4,8 +4,7 @@
|
|
|
4
4
|
* @returns - The `fs`, `path` and `url` Node.js modules.
|
|
5
5
|
*/
|
|
6
6
|
export function getNodeApiOrThrow(methodName) {
|
|
7
|
-
if (
|
|
8
|
-
typeof process.getBuiltinModule !== 'function') {
|
|
7
|
+
if (!isNode()) {
|
|
9
8
|
throw new Error(`${methodName} is only implemented for Node.js`);
|
|
10
9
|
}
|
|
11
10
|
return {
|
|
@@ -14,4 +13,37 @@ export function getNodeApiOrThrow(methodName) {
|
|
|
14
13
|
url: process.getBuiltinModule('node:url'),
|
|
15
14
|
};
|
|
16
15
|
}
|
|
16
|
+
let CanvasCtorBrowser;
|
|
17
|
+
let CanvasCtorNode;
|
|
18
|
+
/**
|
|
19
|
+
* Returns a 2D canvas context for rendering on the browser or Node.js.
|
|
20
|
+
* @param width - Width of the canvas.
|
|
21
|
+
* @param height - Height of the canvas.
|
|
22
|
+
* @returns The initialised canvas context.
|
|
23
|
+
*/
|
|
24
|
+
export function getCanvasContext(width, height) {
|
|
25
|
+
if (isNode()) {
|
|
26
|
+
CanvasCtorNode ??= getRequireFn()('skia-canvas').Canvas;
|
|
27
|
+
return new CanvasCtorNode(width, height).getContext('2d');
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
CanvasCtorBrowser ??= globalThis.OffscreenCanvas;
|
|
31
|
+
const context = new CanvasCtorBrowser(width, height).getContext('2d');
|
|
32
|
+
if (!context) {
|
|
33
|
+
throw new Error('Failed to create canvas context');
|
|
34
|
+
}
|
|
35
|
+
return context;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function isNode() {
|
|
39
|
+
return (typeof process !== 'undefined' &&
|
|
40
|
+
typeof process.getBuiltinModule === 'function');
|
|
41
|
+
}
|
|
42
|
+
let requireFn;
|
|
43
|
+
function getRequireFn() {
|
|
44
|
+
requireFn ??= process
|
|
45
|
+
.getBuiltinModule('node:module')
|
|
46
|
+
.createRequire(import.meta.url);
|
|
47
|
+
return requireFn;
|
|
48
|
+
}
|
|
17
49
|
//# sourceMappingURL=cross_platform.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cross_platform.js","sourceRoot":"","sources":["../../src/utils/cross_platform.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cross_platform.js","sourceRoot":"","sources":["../../src/utils/cross_platform.ts"],"names":[],"mappings":"AAKA;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,GAAG,UAAU,kCAAkC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO;QACL,EAAE,EAAE,OAAO,CAAC,gBAAgB,CAAC,SAAS,CAAC;QACvC,IAAI,EAAE,OAAO,CAAC,gBAAgB,CAAC,WAAW,CAAC;QAC3C,GAAG,EAAE,OAAO,CAAC,gBAAgB,CAAC,UAAU,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,IAAI,iBAAyC,CAAC;AAC9C,IAAI,cAAiC,CAAC;AAEtC;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAa,EACb,MAAc;IAEd,IAAI,MAAM,EAAE,EAAE,CAAC;QACb,cAAc,KAAK,YAAY,EAAE,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC;QACxD,OAAO,IAAI,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,iBAAiB,KAAK,UAAU,CAAC,eAAe,CAAC;QACjD,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED,SAAS,MAAM;IACb,OAAO,CACL,OAAO,OAAO,KAAK,WAAW;QAC9B,OAAO,OAAO,CAAC,gBAAgB,KAAK,UAAU,CAC/C,CAAC;AACJ,CAAC;AAED,IAAI,SAAyB,CAAC;AAC9B,SAAS,YAAY;IACnB,SAAS,KAAK,OAAO;SAClB,gBAAgB,CAAC,aAAa,CAAC;SAC/B,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAClC,OAAO,SAAS,CAAC;AACnB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"points.d.ts","sourceRoot":"","sources":["../../../src/utils/geometry/points.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,GAAG,KAAK,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,GAAG,KAAK,CAE/C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAG7C;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,EAAE,CAWzE;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,UAEvC;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"points.d.ts","sourceRoot":"","sources":["../../../src/utils/geometry/points.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,KAAK;IACpB;;;OAGG;IACH,GAAG,EAAE,MAAM,CAAC;IACZ;;;OAGG;IACH,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,GAAG,KAAK,CAEtD;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,GAAG,KAAK,CAE/C;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAG7C;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,KAAK,EAAE,GAAG,KAAK,EAAE,CAWzE;AAED;;;;;GAKG;AACH,wBAAgB,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,UAEvC;AAED;;;;GAIG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,KAAK,EAAE,CAQxD"}
|
|
@@ -67,12 +67,14 @@ export function round(point) {
|
|
|
67
67
|
* @returns Sorted points.
|
|
68
68
|
*/
|
|
69
69
|
export function sortByColumnRow(points) {
|
|
70
|
-
|
|
70
|
+
const sortedPoints = points.slice();
|
|
71
|
+
sortedPoints.sort((point1, point2) => {
|
|
71
72
|
if (point1.column < point2.column)
|
|
72
73
|
return -1;
|
|
73
74
|
if (point1.column > point2.column)
|
|
74
75
|
return 1;
|
|
75
76
|
return point1.row - point2.row;
|
|
76
77
|
});
|
|
78
|
+
return sortedPoints;
|
|
77
79
|
}
|
|
78
80
|
//# sourceMappingURL=points.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"points.js","sourceRoot":"","sources":["../../../src/utils/geometry/points.ts"],"names":[],"mappings":"AAqBA;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,EAAS,EAAE,EAAS;IAC7C,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACjE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,GAAG,CAAC,EAAS,EAAE,EAAS;IACtC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACjE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,KAAY;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACnD,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,GAAG,MAAM,EAAE,CAAC;AACpE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,OAAe,EAAE,MAAwB;IAC9D,MAAM,OAAO,GAAY,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG;YAC5C,GAAG,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG;SAC1C,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,GAAG,CAAC,EAAS,EAAE,EAAS;IACtC,OAAO,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,KAAY;IAChC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,
|
|
1
|
+
{"version":3,"file":"points.js","sourceRoot":"","sources":["../../../src/utils/geometry/points.ts"],"names":[],"mappings":"AAqBA;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,EAAS,EAAE,EAAS;IAC7C,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACjE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,GAAG,CAAC,EAAS,EAAE,EAAS;IACtC,OAAO,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AACjE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,KAAY;IACpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IACnD,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,GAAG,MAAM,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,GAAG,MAAM,EAAE,CAAC;AACpE,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,OAAe,EAAE,MAAwB;IAC9D,MAAM,OAAO,GAAY,EAAE,CAAC;IAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,OAAO,CAAC,IAAI,CAAC;YACX,MAAM,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG;YAC5C,GAAG,EAAE,GAAG,GAAG,KAAK,CAAC,MAAM,GAAG,GAAG,GAAG,KAAK,CAAC,GAAG;SAC1C,CAAC,CAAC;IACL,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,GAAG,CAAC,EAAS,EAAE,EAAS;IACtC,OAAO,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,GAAG,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC;AACjD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,KAAK,CAAC,KAAY;IAChC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;AAC1E,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAe;IAC7C,MAAM,YAAY,GAAG,MAAM,CAAC,KAAK,EAAE,CAAC;IACpC,YAAY,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QACnC,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC,CAAC;QAC7C,IAAI,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC;QAC5C,OAAO,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,OAAO,YAAY,CAAC;AACtB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"removeClosePoints.d.ts","sourceRoot":"","sources":["../../../src/utils/geometry/removeClosePoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,wBAAwB,
|
|
1
|
+
{"version":3,"file":"removeClosePoints.d.ts","sourceRoot":"","sources":["../../../src/utils/geometry/removeClosePoints.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAE5C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;IAC5B;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,KAAK,EAAE,EACf,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,wBAAwB,WAiClC"}
|
|
@@ -13,7 +13,8 @@ export function removeClosePoints(points, image, options) {
|
|
|
13
13
|
}
|
|
14
14
|
const channel = options?.channel || 0;
|
|
15
15
|
const isMax = kind === 'maximum';
|
|
16
|
-
const sortedPoints = points.slice()
|
|
16
|
+
const sortedPoints = points.slice();
|
|
17
|
+
sortedPoints.sort(getSort(image, channel, isMax));
|
|
17
18
|
if (distance > 0) {
|
|
18
19
|
for (let i = 0; i < sortedPoints.length; i++) {
|
|
19
20
|
for (let j = i + 1; j < sortedPoints.length; j++) {
|