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.
Files changed (140) hide show
  1. package/dist/image-js.esm.js +1041 -245
  2. package/dist/image-js.esm.js.map +1 -1
  3. package/dist/image-js.esm.min.js +2 -2
  4. package/dist/image-js.esm.min.js.map +1 -1
  5. package/dist/image-js.umd.js +1009 -211
  6. package/dist/image-js.umd.js.map +1 -1
  7. package/dist/image-js.umd.min.js +2 -2
  8. package/dist/image-js.umd.min.js.map +1 -1
  9. package/dist-types/image-js.d.ts +4 -5
  10. package/lib/Mask.d.ts +1 -1
  11. package/lib/Mask.js +1 -1
  12. package/lib/draw/drawLineOnImage.d.ts.map +1 -1
  13. package/lib/draw/drawLineOnImage.js.map +1 -1
  14. package/lib/extra/draw/draw_text.d.ts +47 -0
  15. package/lib/extra/draw/draw_text.d.ts.map +1 -0
  16. package/lib/extra/draw/draw_text.js +108 -0
  17. package/lib/extra/draw/draw_text.js.map +1 -0
  18. package/lib/extra/draw/index.d.ts +3 -0
  19. package/lib/extra/draw/index.d.ts.map +1 -0
  20. package/lib/extra/draw/index.js +3 -0
  21. package/lib/extra/draw/index.js.map +1 -0
  22. package/lib/{ssim → extra/ssim}/compute_dssim.d.ts +2 -2
  23. package/lib/extra/ssim/compute_dssim.d.ts.map +1 -0
  24. package/lib/{ssim → extra/ssim}/compute_dssim.js +1 -1
  25. package/lib/extra/ssim/compute_dssim.js.map +1 -0
  26. package/lib/{ssim → extra/ssim}/compute_ssim.d.ts +1 -1
  27. package/lib/extra/ssim/compute_ssim.d.ts.map +1 -0
  28. package/lib/{ssim → extra/ssim}/compute_ssim.js +2 -2
  29. package/lib/extra/ssim/compute_ssim.js.map +1 -0
  30. package/lib/extra/ssim/index.d.ts +3 -0
  31. package/lib/extra/ssim/index.d.ts.map +1 -0
  32. package/lib/extra/ssim/index.js +3 -0
  33. package/lib/extra/ssim/index.js.map +1 -0
  34. package/lib/featureMatching/matching/filterEuclideanDistance.d.ts.map +1 -1
  35. package/lib/featureMatching/matching/filterEuclideanDistance.js +6 -7
  36. package/lib/featureMatching/matching/filterEuclideanDistance.js.map +1 -1
  37. package/lib/featureMatching/matching/filterSmallestDistanceMatches.d.ts.map +1 -1
  38. package/lib/featureMatching/matching/filterSmallestDistanceMatches.js +6 -3
  39. package/lib/featureMatching/matching/filterSmallestDistanceMatches.js.map +1 -1
  40. package/lib/featureMatching/utils/sortByDistance.d.ts.map +1 -1
  41. package/lib/featureMatching/utils/sortByDistance.js +3 -1
  42. package/lib/featureMatching/utils/sortByDistance.js.map +1 -1
  43. package/lib/featureMatching/utils/sortBySourceDest.d.ts.map +1 -1
  44. package/lib/featureMatching/utils/sortBySourceDest.js +6 -2
  45. package/lib/featureMatching/utils/sortBySourceDest.js.map +1 -1
  46. package/lib/index_browser.d.ts +3 -0
  47. package/lib/index_browser.d.ts.map +1 -0
  48. package/lib/index_browser.js +5 -0
  49. package/lib/index_browser.js.map +1 -0
  50. package/lib/index_full.d.ts +4 -0
  51. package/lib/index_full.d.ts.map +1 -0
  52. package/lib/index_full.js +5 -0
  53. package/lib/index_full.js.map +1 -0
  54. package/lib/load/decode.d.ts.map +1 -1
  55. package/lib/load/decode.js +2 -0
  56. package/lib/load/decode.js.map +1 -1
  57. package/lib/load/decodeBmp.d.ts +8 -0
  58. package/lib/load/decodeBmp.d.ts.map +1 -0
  59. package/lib/load/decodeBmp.js +36 -0
  60. package/lib/load/decodeBmp.js.map +1 -0
  61. package/lib/load/decodePng.d.ts.map +1 -1
  62. package/lib/load/decodePng.js +29 -5
  63. package/lib/load/decodePng.js.map +1 -1
  64. package/lib/load/decodeTiff.d.ts.map +1 -1
  65. package/lib/load/decodeTiff.js +44 -21
  66. package/lib/load/decodeTiff.js.map +1 -1
  67. package/lib/load/read.d.ts +1 -1
  68. package/lib/load/read.js +1 -1
  69. package/lib/maskAnalysis/utils/getMbrAngle.d.ts.map +1 -1
  70. package/lib/maskAnalysis/utils/getMbrAngle.js +2 -1
  71. package/lib/maskAnalysis/utils/getMbrAngle.js.map +1 -1
  72. package/lib/maskAnalysis/utils/monotoneChainConvexHull.d.ts.map +1 -1
  73. package/lib/maskAnalysis/utils/monotoneChainConvexHull.js +2 -1
  74. package/lib/maskAnalysis/utils/monotoneChainConvexHull.js.map +1 -1
  75. package/lib/save/encodeBmp.d.ts +4 -4
  76. package/lib/save/encodeBmp.d.ts.map +1 -1
  77. package/lib/save/encodeBmp.js +22 -14
  78. package/lib/save/encodeBmp.js.map +1 -1
  79. package/lib/save/write.d.ts +1 -1
  80. package/lib/save/write.js +1 -1
  81. package/lib/stack/load/decodeApng.d.ts +8 -0
  82. package/lib/stack/load/decodeApng.d.ts.map +1 -0
  83. package/lib/stack/load/decodeApng.js +60 -0
  84. package/lib/stack/load/decodeApng.js.map +1 -0
  85. package/lib/stack/load/decodeStack.d.ts.map +1 -1
  86. package/lib/stack/load/decodeStack.js +2 -0
  87. package/lib/stack/load/decodeStack.js.map +1 -1
  88. package/lib/utils/cross_platform.d.ts +8 -0
  89. package/lib/utils/cross_platform.d.ts.map +1 -1
  90. package/lib/utils/cross_platform.js +34 -2
  91. package/lib/utils/cross_platform.js.map +1 -1
  92. package/lib/utils/geometry/points.d.ts.map +1 -1
  93. package/lib/utils/geometry/points.js +3 -1
  94. package/lib/utils/geometry/points.js.map +1 -1
  95. package/lib/utils/geometry/removeClosePoints.d.ts.map +1 -1
  96. package/lib/utils/geometry/removeClosePoints.js +2 -1
  97. package/lib/utils/geometry/removeClosePoints.js.map +1 -1
  98. package/lib/utils/setBlendedPixel.d.ts +1 -1
  99. package/lib/utils/setBlendedPixel.js +1 -1
  100. package/lib/utils/setBlendedVisiblePixel.d.ts +1 -1
  101. package/lib/utils/setBlendedVisiblePixel.js +1 -1
  102. package/package.json +43 -29
  103. package/src/Mask.ts +1 -1
  104. package/src/draw/drawLineOnImage.ts +0 -1
  105. package/src/extra/draw/draw_text.ts +194 -0
  106. package/src/extra/draw/index.ts +2 -0
  107. package/src/{ssim → extra/ssim}/compute_dssim.ts +3 -3
  108. package/src/{ssim → extra/ssim}/compute_ssim.ts +3 -3
  109. package/src/extra/ssim/index.ts +2 -0
  110. package/src/featureMatching/matching/filterEuclideanDistance.ts +6 -13
  111. package/src/featureMatching/matching/filterSmallestDistanceMatches.ts +6 -9
  112. package/src/featureMatching/utils/sortByDistance.ts +3 -1
  113. package/src/featureMatching/utils/sortBySourceDest.ts +6 -2
  114. package/src/index_browser.ts +4 -0
  115. package/src/index_full.ts +4 -0
  116. package/src/load/decode.ts +2 -1
  117. package/src/load/decodeBmp.ts +37 -0
  118. package/src/load/decodePng.ts +39 -7
  119. package/src/load/decodeTiff.ts +53 -22
  120. package/src/load/read.ts +1 -1
  121. package/src/maskAnalysis/utils/getMbrAngle.ts +2 -1
  122. package/src/maskAnalysis/utils/monotoneChainConvexHull.ts +2 -1
  123. package/src/save/encodeBmp.ts +22 -15
  124. package/src/save/write.ts +1 -1
  125. package/src/stack/load/decodeApng.ts +71 -0
  126. package/src/stack/load/decodeStack.ts +2 -0
  127. package/src/utils/cross_platform.ts +47 -4
  128. package/src/utils/geometry/points.ts +3 -1
  129. package/src/utils/geometry/removeClosePoints.ts +2 -1
  130. package/src/utils/setBlendedPixel.ts +1 -1
  131. package/src/utils/setBlendedVisiblePixel.ts +1 -1
  132. package/lib/ssim/compute_dssim.d.ts.map +0 -1
  133. package/lib/ssim/compute_dssim.js.map +0 -1
  134. package/lib/ssim/compute_ssim.d.ts.map +0 -1
  135. package/lib/ssim/compute_ssim.js.map +0 -1
  136. package/lib/ssim/index.d.ts +0 -3
  137. package/lib/ssim/index.d.ts.map +0 -1
  138. package/lib/ssim/index.js +0 -3
  139. package/lib/ssim/index.js.map +0 -1
  140. 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,CA+BnD"}
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"}
@@ -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 === 16 ? 16 : 8;
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 * 3);
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
- data[dataIndex++] = paletteValue[0];
61
- data[dataIndex++] = paletteValue[1];
62
- data[dataIndex++] = paletteValue[2];
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":"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"}
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,CAIpD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,KAAK,CAqCnD"}
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"}
@@ -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
- // Palette
22
- const data = new Uint16Array(3 * ifd.width * ifd.height);
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
- for (const index of ifd.data) {
26
- const color = palette[index];
27
- data[ptr++] = color[0];
28
- data[ptr++] = color[1];
29
- data[ptr++] = color[2];
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
- // TODO: handle alpha properly
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.type === 2
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;IAC9B,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;IAClC,0CAA0C;AAC5C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,IAAI,GAAG,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACnB,UAAU;QACV,MAAM,IAAI,GAAG,IAAI,WAAW,CAAC,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC;QACzD,MAAM,OAAO,GAAG,GAAG,CAAC,OAA0C,CAAC;QAC/D,IAAI,GAAG,GAAG,CAAC,CAAC;QACZ,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;YAC7B,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACzB,CAAC;QACD,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;YACtC,IAAI;YACJ,8BAA8B;YAC9B,UAAU,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK;YACtC,gCAAgC;YAChC,QAAQ,EAAE,EAAE;YACZ,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC;SACvB,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,OAAO,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE;YACtC,0BAA0B;YAC1B,8CAA8C;YAC9C,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,QAAQ,EAAE,GAAG,CAAC,aAAyB;YACvC,UAAU,EACR,GAAG,CAAC,IAAI,KAAK,CAAC;gBACZ,CAAC,CAAC,GAAG,CAAC,KAAK;oBACT,CAAC,CAAC,MAAM;oBACR,CAAC,CAAC,KAAK;gBACT,CAAC,CAAC,GAAG,CAAC,KAAK;oBACT,CAAC,CAAC,OAAO;oBACT,CAAC,CAAC,MAAM;YACd,IAAI,EAAE,WAAW,CAAC,GAAG,CAAC;SACvB,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"decodeTiff.js","sourceRoot":"","sources":["../../src/load/decodeTiff.ts"],"names":[],"mappings":"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"}
@@ -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 @see {@link read}.
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 @see {@link read}.
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,CASzD"}
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().sort(leftFirst);
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;IAC3C,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
+ {"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,CA4BT"}
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().sort(byXThenY);
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;IACzC,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"}
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"}
@@ -1,9 +1,9 @@
1
- import type { Image } from '../Image.js';
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 mask - The mask instance.
5
+ * @param image - The mask instance.
6
6
  * @returns The buffer.
7
7
  */
8
- export declare function encodeBmp(mask: Image | Mask): Uint8Array<ArrayBufferLike>;
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,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,KAAK,GAAG,IAAI,+BAa3C"}
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"}
@@ -1,22 +1,30 @@
1
1
  import * as bmp from 'fast-bmp';
2
- import { Mask } from '../Mask.js';
2
+ import { Image } from '../Image.js';
3
3
  /**
4
4
  * Creates a BMP buffer from a mask.
5
- * @param mask - The mask instance.
5
+ * @param image - The mask instance.
6
6
  * @returns The buffer.
7
7
  */
8
- export function encodeBmp(mask) {
9
- if (!(mask instanceof Mask)) {
10
- throw new TypeError('Image bmp encoding is not implemented.');
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;AAGhC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAElC;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,IAAkB;IAC1C,IAAI,CAAC,CAAC,IAAI,YAAY,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,SAAS,CAAC,wCAAwC,CAAC,CAAC;IAChE,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;IACrC,OAAO,GAAG,CAAC,MAAM,CAAC;QAChB,KAAK,EAAE,SAAS,CAAC,KAAK;QACtB,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,CAAC;QACf,QAAQ,EAAE,CAAC;QACX,IAAI,EAAE,SAAS,CAAC,IAAI;KACrB,CAAC,CAAC;AACL,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"}
@@ -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 @see {@link write}.
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 @see {@link write}.
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,8 @@
1
+ import { Stack } from '../../Stack.ts';
2
+ /**
3
+ * Decodes APNG image into a Stack
4
+ * @param data - APNG data.
5
+ * @returns stack of frames.
6
+ */
7
+ export declare function decodeStackFromApng(data: Uint8Array): Stack;
8
+ //# sourceMappingURL=decodeApng.d.ts.map
@@ -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;AAI5C;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,eAAe,GAAG,KAAK,CAYxD"}
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;;;;EAYnD"}
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 (typeof process === 'undefined' ||
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":"AAAA;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAAkB;IAClD,IACE,OAAO,OAAO,KAAK,WAAW;QAC9B,OAAO,OAAO,CAAC,gBAAgB,KAAK,UAAU,EAC9C,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"}
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,CAMxD"}
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
- return points.slice().sort((point1, point2) => {
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,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE;QAC5C,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;AACL,CAAC"}
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,WAgClC"}
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().sort(getSort(image, channel, isMax));
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++) {