@loaders.gl/geotiff 3.1.0-alpha.4 → 3.1.0-beta.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundle.d.ts +2 -0
- package/dist/bundle.d.ts.map +1 -0
- package/dist/bundle.js +26 -0
- package/dist/es5/bundle.js +2 -4
- package/dist/es5/bundle.js.map +1 -1
- package/dist/es5/index.js +2 -2
- package/dist/es5/lib/load-geotiff.js +27 -85
- package/dist/es5/lib/load-geotiff.js.map +1 -1
- package/dist/es5/lib/ome/load-ome-tiff.js +45 -62
- package/dist/es5/lib/ome/load-ome-tiff.js.map +1 -1
- package/dist/es5/lib/ome/ome-indexers.js +75 -117
- package/dist/es5/lib/ome/ome-indexers.js.map +1 -1
- package/dist/es5/lib/ome/ome-utils.js +18 -21
- package/dist/es5/lib/ome/ome-utils.js.map +1 -1
- package/dist/es5/lib/ome/omexml.js +30 -35
- package/dist/es5/lib/ome/omexml.js.map +1 -1
- package/dist/es5/lib/ome/utils.js +3 -5
- package/dist/es5/lib/ome/utils.js.map +1 -1
- package/dist/es5/lib/tiff-pixel-source.js +83 -169
- package/dist/es5/lib/tiff-pixel-source.js.map +1 -1
- package/dist/es5/lib/utils/Pool.js +53 -141
- package/dist/es5/lib/utils/Pool.js.map +1 -1
- package/dist/es5/lib/utils/proxies.js +13 -22
- package/dist/es5/lib/utils/proxies.js.map +1 -1
- package/dist/es5/lib/utils/tiff-utils.js +9 -18
- package/dist/es5/lib/utils/tiff-utils.js.map +1 -1
- package/dist/esm/lib/ome/ome-indexers.js +2 -2
- package/dist/esm/lib/ome/ome-indexers.js.map +1 -1
- package/dist/esm/lib/ome/ome-utils.js +1 -1
- package/dist/esm/lib/ome/ome-utils.js.map +1 -1
- package/dist/esm/lib/ome/omexml.js +5 -5
- package/dist/esm/lib/ome/omexml.js.map +1 -1
- package/dist/esm/lib/utils/proxies.js +2 -2
- package/dist/esm/lib/utils/proxies.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/lib/load-geotiff.d.ts +28 -0
- package/dist/lib/load-geotiff.d.ts.map +1 -0
- package/dist/lib/load-geotiff.js +57 -0
- package/dist/lib/ome/load-ome-tiff.d.ts +50 -0
- package/dist/lib/ome/load-ome-tiff.d.ts.map +1 -0
- package/dist/lib/ome/load-ome-tiff.js +46 -0
- package/dist/lib/ome/ome-indexers.d.ts +11 -0
- package/dist/lib/ome/ome-indexers.d.ts.map +1 -0
- package/dist/lib/ome/ome-indexers.js +108 -0
- package/dist/lib/ome/ome-utils.d.ts +28 -0
- package/dist/lib/ome/ome-utils.d.ts.map +1 -0
- package/dist/lib/ome/ome-utils.js +63 -0
- package/dist/lib/ome/omexml.d.ts +49 -0
- package/dist/lib/ome/omexml.d.ts.map +1 -0
- package/dist/lib/ome/omexml.js +66 -0
- package/dist/lib/ome/utils.d.ts +5 -0
- package/dist/lib/ome/utils.d.ts.map +1 -0
- package/dist/lib/ome/utils.js +30 -0
- package/dist/lib/tiff-pixel-source.d.ts +18 -0
- package/dist/lib/tiff-pixel-source.d.ts.map +1 -0
- package/dist/lib/tiff-pixel-source.js +64 -0
- package/dist/lib/utils/Pool.d.ts +29 -0
- package/dist/lib/utils/Pool.d.ts.map +1 -0
- package/dist/lib/utils/Pool.js +83 -0
- package/dist/lib/utils/proxies.d.ts +6 -0
- package/dist/lib/utils/proxies.d.ts.map +1 -0
- package/dist/lib/utils/proxies.js +86 -0
- package/dist/lib/utils/tiff-utils.d.ts +10 -0
- package/dist/lib/utils/tiff-utils.d.ts.map +1 -0
- package/dist/lib/utils/tiff-utils.js +44 -0
- package/dist/types.d.ts +47 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/typings/geotiff.d.ts +60 -0
- package/dist/typings/geotiff.d.ts.map +1 -0
- package/dist/typings/geotiff.js +1 -0
- package/package.json +5 -5
- package/dist/dist.min.js +0 -13
- package/dist/dist.min.js.map +0 -1
package/dist/bundle.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../src/bundle.ts"],"names":[],"mappings":""}
|
package/dist/bundle.js
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
|
5
|
+
}) : (function(o, m, k, k2) {
|
|
6
|
+
if (k2 === undefined) k2 = k;
|
|
7
|
+
o[k2] = m[k];
|
|
8
|
+
}));
|
|
9
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
10
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
11
|
+
}) : function(o, v) {
|
|
12
|
+
o["default"] = v;
|
|
13
|
+
});
|
|
14
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
15
|
+
if (mod && mod.__esModule) return mod;
|
|
16
|
+
var result = {};
|
|
17
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
18
|
+
__setModuleDefault(result, mod);
|
|
19
|
+
return result;
|
|
20
|
+
};
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
const moduleExports = __importStar(require("./index"));
|
|
23
|
+
// @ts-ignore
|
|
24
|
+
globalThis.loaders = globalThis.loaders || {};
|
|
25
|
+
// @ts-ignore
|
|
26
|
+
module.exports = Object.assign(globalThis.loaders, moduleExports);
|
package/dist/es5/bundle.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _typeof = require("@babel/runtime/helpers/typeof");
|
|
4
|
-
|
|
5
3
|
var moduleExports = _interopRequireWildcard(require("./index"));
|
|
6
4
|
|
|
7
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function
|
|
5
|
+
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
8
6
|
|
|
9
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null ||
|
|
7
|
+
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
10
8
|
|
|
11
9
|
globalThis.loaders = globalThis.loaders || {};
|
|
12
10
|
module.exports = Object.assign(globalThis.loaders, moduleExports);
|
package/dist/es5/bundle.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/bundle.ts"],"names":["globalThis","loaders","module","exports","Object","assign","moduleExports"],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/bundle.ts"],"names":["globalThis","loaders","module","exports","Object","assign","moduleExports"],"mappings":";;AAAA;;;;;;AAEAA,UAAU,CAACC,OAAX,GAAqBD,UAAU,CAACC,OAAX,IAAsB,EAA3C;AAEAC,MAAM,CAACC,OAAP,GAAiBC,MAAM,CAACC,MAAP,CAAcL,UAAU,CAACC,OAAzB,EAAkCK,aAAlC,CAAjB","sourcesContent":["import * as moduleExports from './index';\n// @ts-ignore\nglobalThis.loaders = globalThis.loaders || {};\n// @ts-ignore\nmodule.exports = Object.assign(globalThis.loaders, moduleExports);\n"],"file":"bundle.js"}
|
package/dist/es5/index.js
CHANGED
|
@@ -7,13 +7,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
7
7
|
});
|
|
8
8
|
Object.defineProperty(exports, "loadGeoTiff", {
|
|
9
9
|
enumerable: true,
|
|
10
|
-
get: function
|
|
10
|
+
get: function () {
|
|
11
11
|
return _loadGeotiff.loadGeoTiff;
|
|
12
12
|
}
|
|
13
13
|
});
|
|
14
14
|
Object.defineProperty(exports, "TiffPixelSource", {
|
|
15
15
|
enumerable: true,
|
|
16
|
-
get: function
|
|
16
|
+
get: function () {
|
|
17
17
|
return _tiffPixelSource.default;
|
|
18
18
|
}
|
|
19
19
|
});
|
|
@@ -1,100 +1,42 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
8
6
|
exports.loadGeoTiff = loadGeoTiff;
|
|
9
7
|
|
|
10
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
11
|
-
|
|
12
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
13
|
-
|
|
14
8
|
var _geotiff = require("geotiff");
|
|
15
9
|
|
|
16
10
|
var _proxies = require("./utils/proxies");
|
|
17
11
|
|
|
18
12
|
var _loadOmeTiff = require("./ome/load-ome-tiff");
|
|
19
13
|
|
|
20
|
-
function loadGeoTiff(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
case 6:
|
|
49
|
-
if (!(typeof source === 'string')) {
|
|
50
|
-
_context.next = 12;
|
|
51
|
-
break;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
_context.next = 9;
|
|
55
|
-
return (0, _geotiff.fromUrl)(source, headers);
|
|
56
|
-
|
|
57
|
-
case 9:
|
|
58
|
-
tiff = _context.sent;
|
|
59
|
-
_context.next = 15;
|
|
60
|
-
break;
|
|
61
|
-
|
|
62
|
-
case 12:
|
|
63
|
-
_context.next = 14;
|
|
64
|
-
return (0, _geotiff.fromBlob)(source);
|
|
65
|
-
|
|
66
|
-
case 14:
|
|
67
|
-
tiff = _context.sent;
|
|
68
|
-
|
|
69
|
-
case 15:
|
|
70
|
-
if (offsets) {
|
|
71
|
-
tiff = (0, _proxies.createOffsetsProxy)(tiff, offsets);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
(0, _proxies.checkProxies)(tiff);
|
|
75
|
-
_context.next = 19;
|
|
76
|
-
return tiff.getImage(0);
|
|
77
|
-
|
|
78
|
-
case 19:
|
|
79
|
-
firstImage = _context.sent;
|
|
80
|
-
|
|
81
|
-
if (!(0, _loadOmeTiff.isOmeTiff)(firstImage)) {
|
|
82
|
-
_context.next = 22;
|
|
83
|
-
break;
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
return _context.abrupt("return", (0, _loadOmeTiff.loadOmeTiff)(tiff, firstImage));
|
|
87
|
-
|
|
88
|
-
case 22:
|
|
89
|
-
throw new Error('GeoTIFF not recognized.');
|
|
90
|
-
|
|
91
|
-
case 23:
|
|
92
|
-
case "end":
|
|
93
|
-
return _context.stop();
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}, _callee);
|
|
97
|
-
}));
|
|
98
|
-
return _loadGeoTiff.apply(this, arguments);
|
|
14
|
+
async function loadGeoTiff(source, opts = {}) {
|
|
15
|
+
const {
|
|
16
|
+
headers,
|
|
17
|
+
offsets
|
|
18
|
+
} = opts;
|
|
19
|
+
let tiff;
|
|
20
|
+
|
|
21
|
+
if (source instanceof _geotiff.GeoTIFF) {
|
|
22
|
+
tiff = source;
|
|
23
|
+
} else if (typeof source === 'string') {
|
|
24
|
+
tiff = await (0, _geotiff.fromUrl)(source, headers);
|
|
25
|
+
} else {
|
|
26
|
+
tiff = await (0, _geotiff.fromBlob)(source);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
if (offsets) {
|
|
30
|
+
tiff = (0, _proxies.createOffsetsProxy)(tiff, offsets);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
(0, _proxies.checkProxies)(tiff);
|
|
34
|
+
const firstImage = await tiff.getImage(0);
|
|
35
|
+
|
|
36
|
+
if ((0, _loadOmeTiff.isOmeTiff)(firstImage)) {
|
|
37
|
+
return (0, _loadOmeTiff.loadOmeTiff)(tiff, firstImage);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
throw new Error('GeoTIFF not recognized.');
|
|
99
41
|
}
|
|
100
42
|
//# sourceMappingURL=load-geotiff.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../src/lib/load-geotiff.ts"],"names":["loadGeoTiff","source","opts","headers","offsets","
|
|
1
|
+
{"version":3,"sources":["../../../src/lib/load-geotiff.ts"],"names":["loadGeoTiff","source","opts","headers","offsets","tiff","GeoTIFF","firstImage","getImage","Error"],"mappings":";;;;;;;AAAA;;AAEA;;AAOA;;AA4BO,eAAeA,WAAf,CACLC,MADK,EAELC,IAAoB,GAAG,EAFlB,EAGiB;AACtB,QAAM;AAACC,IAAAA,OAAD;AAAUC,IAAAA;AAAV,MAAqBF,IAA3B;AAGA,MAAIG,IAAJ;;AACA,MAAIJ,MAAM,YAAYK,gBAAtB,EAA+B;AAC7BD,IAAAA,IAAI,GAAGJ,MAAP;AACD,GAFD,MAEO,IAAI,OAAOA,MAAP,KAAkB,QAAtB,EAAgC;AACrCI,IAAAA,IAAI,GAAG,MAAM,sBAAQJ,MAAR,EAAgBE,OAAhB,CAAb;AACD,GAFM,MAEA;AACLE,IAAAA,IAAI,GAAG,MAAM,uBAASJ,MAAT,CAAb;AACD;;AAUD,MAAIG,OAAJ,EAAa;AAMXC,IAAAA,IAAI,GAAG,iCAAmBA,IAAnB,EAAyBD,OAAzB,CAAP;AACD;;AAMD,6BAAaC,IAAb;AAEA,QAAME,UAAU,GAAG,MAAMF,IAAI,CAACG,QAAL,CAAc,CAAd,CAAzB;;AAEA,MAAI,4BAAUD,UAAV,CAAJ,EAA2B;AACzB,WAAO,8BAAYF,IAAZ,EAAkBE,UAAlB,CAAP;AACD;;AAED,QAAM,IAAIE,KAAJ,CAAU,yBAAV,CAAN;AACD","sourcesContent":["import {fromUrl, fromBlob, GeoTIFF} from 'geotiff';\n\nimport {\n // createPoolProxy,\n createOffsetsProxy,\n checkProxies\n} from './utils/proxies';\n// import Pool from './lib/Pool';\n\nimport {loadOmeTiff, isOmeTiff} from './ome/load-ome-tiff';\nimport type TiffPixelSource from './tiff-pixel-source';\n\n/** Options for initializing a tiff pixel source. */\ninterface GeoTIFFOptions {\n /** Headers passed to each underlying request. */\n headers?: Record<string, unknown>;\n /** Performance enhancment to index the remote tiff source using pre-computed byte-offsets. Generated via https://github.com/ilan-gold/generate-tiff-offsets */\n offsets?: number[];\n /** Indicates whether a multi-threaded pool of image decoders should be used to decode tiles. */\n pool?: boolean;\n}\n\ninterface GeoTIFFData {\n data: TiffPixelSource<string[]>[];\n metadata: Record<string, unknown>;\n}\n\n/**\n * Opens an OME-TIFF via URL and returns data source and associated metadata for first image.\n *\n * @param source url string, File/Blob object, or GeoTIFF object\n * @param opts options for initializing a tiff pixel source.\n * - `opts.headers` are passed to each underlying fetch request.\n * - `opts.offsets` are a performance enhancment to index the remote tiff source using pre-computed byte-offsets.\n * - `opts.pool` indicates whether a multi-threaded pool of image decoders should be used to decode tiles (default = true).\n * @return data source and associated OME-Zarr metadata.\n */\nexport async function loadGeoTiff(\n source: string | Blob | GeoTIFF,\n opts: GeoTIFFOptions = {}\n): Promise<GeoTIFFData> {\n const {headers, offsets} = opts;\n\n // Create tiff source\n let tiff: GeoTIFF;\n if (source instanceof GeoTIFF) {\n tiff = source;\n } else if (typeof source === 'string') {\n tiff = await fromUrl(source, headers);\n } else {\n tiff = await fromBlob(source);\n }\n\n // if (pool) {\n /*\n * Creates a worker pool to decode tiff tiles. Wraps tiff\n * in a Proxy that injects 'pool' into `tiff.readRasters`.\n */\n // tiff = createPoolProxy(tiff, new Pool());\n // }\n\n if (offsets) {\n /*\n * Performance enhancement. If offsets are provided, we\n * create a proxy that intercepts calls to `tiff.getImage`\n * and injects the pre-computed offsets.\n */\n tiff = createOffsetsProxy(tiff, offsets);\n }\n\n /*\n * Inspect tiff source for our performance enhancing proxies.\n * Prints warnings to console if `offsets` or `pool` are missing.\n */\n checkProxies(tiff);\n\n const firstImage = await tiff.getImage(0);\n\n if (isOmeTiff(firstImage)) {\n return loadOmeTiff(tiff, firstImage);\n }\n\n throw new Error('GeoTIFF not recognized.');\n}\n"],"file":"load-geotiff.js"}
|
|
@@ -8,10 +8,6 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
8
8
|
exports.loadOmeTiff = loadOmeTiff;
|
|
9
9
|
exports.isOmeTiff = void 0;
|
|
10
10
|
|
|
11
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
12
|
-
|
|
13
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
14
|
-
|
|
15
11
|
var _tiffPixelSource = _interopRequireDefault(require("../tiff-pixel-source"));
|
|
16
12
|
|
|
17
13
|
var _omeIndexers = require("./ome-indexers");
|
|
@@ -20,66 +16,53 @@ var _omeUtils = require("./ome-utils");
|
|
|
20
16
|
|
|
21
17
|
var _omexml = require("./omexml");
|
|
22
18
|
|
|
23
|
-
|
|
24
|
-
return img.fileDirectory.ImageDescription.includes('<OME');
|
|
25
|
-
};
|
|
19
|
+
const isOmeTiff = img => img.fileDirectory.ImageDescription.includes('<OME');
|
|
26
20
|
|
|
27
21
|
exports.isOmeTiff = isOmeTiff;
|
|
28
22
|
|
|
29
|
-
function loadOmeTiff(
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
metadata: imgMeta
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
case 9:
|
|
77
|
-
case "end":
|
|
78
|
-
return _context.stop();
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}, _callee);
|
|
82
|
-
}));
|
|
83
|
-
return _loadOmeTiff.apply(this, arguments);
|
|
23
|
+
async function loadOmeTiff(tiff, firstImage) {
|
|
24
|
+
const {
|
|
25
|
+
ImageDescription,
|
|
26
|
+
SubIFDs,
|
|
27
|
+
PhotometricInterpretation: photometricInterpretation
|
|
28
|
+
} = firstImage.fileDirectory;
|
|
29
|
+
const omexml = (0, _omexml.fromString)(ImageDescription);
|
|
30
|
+
let levels;
|
|
31
|
+
let pyramidIndexer;
|
|
32
|
+
|
|
33
|
+
if (SubIFDs) {
|
|
34
|
+
levels = SubIFDs.length + 1;
|
|
35
|
+
pyramidIndexer = (0, _omeIndexers.getOmeSubIFDIndexer)(tiff, omexml);
|
|
36
|
+
} else {
|
|
37
|
+
levels = omexml.length;
|
|
38
|
+
pyramidIndexer = (0, _omeIndexers.getOmeLegacyIndexer)(tiff, omexml);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const imgMeta = omexml[0];
|
|
42
|
+
const {
|
|
43
|
+
labels,
|
|
44
|
+
getShape,
|
|
45
|
+
physicalSizes,
|
|
46
|
+
dtype
|
|
47
|
+
} = (0, _omeUtils.getOmePixelSourceMeta)(imgMeta);
|
|
48
|
+
const tileSize = firstImage.getTileWidth();
|
|
49
|
+
const meta = {
|
|
50
|
+
photometricInterpretation,
|
|
51
|
+
physicalSizes
|
|
52
|
+
};
|
|
53
|
+
const data = Array.from({
|
|
54
|
+
length: levels
|
|
55
|
+
}).map((_, resolution) => {
|
|
56
|
+
const shape = getShape(resolution);
|
|
57
|
+
|
|
58
|
+
const indexer = sel => pyramidIndexer(sel, resolution);
|
|
59
|
+
|
|
60
|
+
const source = new _tiffPixelSource.default(indexer, dtype, tileSize, shape, labels, meta);
|
|
61
|
+
return source;
|
|
62
|
+
});
|
|
63
|
+
return {
|
|
64
|
+
data,
|
|
65
|
+
metadata: imgMeta
|
|
66
|
+
};
|
|
84
67
|
}
|
|
85
68
|
//# sourceMappingURL=load-ome-tiff.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../src/lib/ome/load-ome-tiff.ts"],"names":["isOmeTiff","img","fileDirectory","ImageDescription","includes","loadOmeTiff","tiff","firstImage","SubIFDs","
|
|
1
|
+
{"version":3,"sources":["../../../../src/lib/ome/load-ome-tiff.ts"],"names":["isOmeTiff","img","fileDirectory","ImageDescription","includes","loadOmeTiff","tiff","firstImage","SubIFDs","PhotometricInterpretation","photometricInterpretation","omexml","levels","pyramidIndexer","length","imgMeta","labels","getShape","physicalSizes","dtype","tileSize","getTileWidth","meta","data","Array","from","map","_","resolution","shape","indexer","sel","source","TiffPixelSource","metadata"],"mappings":";;;;;;;;;;AAEA;;AACA;;AACA;;AACA;;AAGO,MAAMA,SAAS,GAAIC,GAAD,IAAuBA,GAAG,CAACC,aAAJ,CAAkBC,gBAAlB,CAAmCC,QAAnC,CAA4C,MAA5C,CAAzC;;;;AAEA,eAAeC,WAAf,CAA2BC,IAA3B,EAA0CC,UAA1C,EAAoE;AAEzE,QAAM;AACJJ,IAAAA,gBADI;AAEJK,IAAAA,OAFI;AAGJC,IAAAA,yBAAyB,EAAEC;AAHvB,MAIFH,UAAU,CAACL,aAJf;AAKA,QAAMS,MAAM,GAAG,wBAAWR,gBAAX,CAAf;AAMA,MAAIS,MAAJ;AACA,MAAIC,cAAJ;;AAEA,MAAIL,OAAJ,EAAa;AAEXI,IAAAA,MAAM,GAAGJ,OAAO,CAACM,MAAR,GAAiB,CAA1B;AACAD,IAAAA,cAAc,GAAG,sCAAoBP,IAApB,EAA0BK,MAA1B,CAAjB;AACD,GAJD,MAIO;AAELC,IAAAA,MAAM,GAAGD,MAAM,CAACG,MAAhB;AACAD,IAAAA,cAAc,GAAG,sCAAoBP,IAApB,EAA0BK,MAA1B,CAAjB;AACD;;AAGD,QAAMI,OAAO,GAAGJ,MAAM,CAAC,CAAD,CAAtB;AACA,QAAM;AAACK,IAAAA,MAAD;AAASC,IAAAA,QAAT;AAAmBC,IAAAA,aAAnB;AAAkCC,IAAAA;AAAlC,MAA2C,qCAAsBJ,OAAtB,CAAjD;AACA,QAAMK,QAAQ,GAAGb,UAAU,CAACc,YAAX,EAAjB;AACA,QAAMC,IAAI,GAAG;AAACZ,IAAAA,yBAAD;AAA4BQ,IAAAA;AAA5B,GAAb;AAEA,QAAMK,IAAI,GAAGC,KAAK,CAACC,IAAN,CAAW;AAACX,IAAAA,MAAM,EAAEF;AAAT,GAAX,EAA6Bc,GAA7B,CAAiC,CAACC,CAAD,EAAIC,UAAJ,KAAmB;AAC/D,UAAMC,KAAK,GAAGZ,QAAQ,CAACW,UAAD,CAAtB;;AACA,UAAME,OAAO,GAAIC,GAAD,IAA2BlB,cAAc,CAACkB,GAAD,EAAMH,UAAN,CAAzD;;AACA,UAAMI,MAAM,GAAG,IAAIC,wBAAJ,CAAoBH,OAApB,EAA6BX,KAA7B,EAAoCC,QAApC,EAA8CS,KAA9C,EAAqDb,MAArD,EAA6DM,IAA7D,CAAf;AACA,WAAOU,MAAP;AACD,GALY,CAAb;AAOA,SAAO;AAACT,IAAAA,IAAD;AAAOW,IAAAA,QAAQ,EAAEnB;AAAjB,GAAP;AACD","sourcesContent":["import type {GeoTIFF, GeoTIFFImage} from 'geotiff';\n\nimport TiffPixelSource from '../tiff-pixel-source';\nimport {getOmeLegacyIndexer, getOmeSubIFDIndexer, OmeTiffIndexer} from './ome-indexers';\nimport {getOmePixelSourceMeta} from './ome-utils';\nimport {fromString} from './omexml';\nimport type {OmeTiffSelection} from './ome-indexers';\n\nexport const isOmeTiff = (img: GeoTIFFImage) => img.fileDirectory.ImageDescription.includes('<OME');\n\nexport async function loadOmeTiff(tiff: GeoTIFF, firstImage: GeoTIFFImage) {\n // Get first image from tiff and inspect OME-XML metadata\n const {\n ImageDescription,\n SubIFDs,\n PhotometricInterpretation: photometricInterpretation\n } = firstImage.fileDirectory;\n const omexml = fromString(ImageDescription);\n\n /*\n * Image pyramids are stored differently between versions of Bioformats.\n * Thus we need a different indexer depending on which format we have.\n */\n let levels: number;\n let pyramidIndexer: OmeTiffIndexer;\n\n if (SubIFDs) {\n // Image is >= Bioformats 6.0 and resolutions are stored using SubIFDs.\n levels = SubIFDs.length + 1;\n pyramidIndexer = getOmeSubIFDIndexer(tiff, omexml);\n } else {\n // Image is legacy format; resolutions are stored as separate images.\n levels = omexml.length;\n pyramidIndexer = getOmeLegacyIndexer(tiff, omexml);\n }\n\n // TODO: The OmeTIFF loader only works for the _first_ image in the metadata.\n const imgMeta = omexml[0];\n const {labels, getShape, physicalSizes, dtype} = getOmePixelSourceMeta(imgMeta);\n const tileSize = firstImage.getTileWidth();\n const meta = {photometricInterpretation, physicalSizes};\n\n const data = Array.from({length: levels}).map((_, resolution) => {\n const shape = getShape(resolution);\n const indexer = (sel: OmeTiffSelection) => pyramidIndexer(sel, resolution);\n const source = new TiffPixelSource(indexer, dtype, tileSize, shape, labels, meta);\n return source;\n });\n\n return {data, metadata: imgMeta};\n}\n"],"file":"load-ome-tiff.js"}
|
|
@@ -1,161 +1,119 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
4
|
-
|
|
5
3
|
Object.defineProperty(exports, "__esModule", {
|
|
6
4
|
value: true
|
|
7
5
|
});
|
|
8
6
|
exports.getOmeLegacyIndexer = getOmeLegacyIndexer;
|
|
9
7
|
exports.getOmeSubIFDIndexer = getOmeSubIFDIndexer;
|
|
10
8
|
|
|
11
|
-
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
12
|
-
|
|
13
|
-
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
|
|
14
|
-
|
|
15
9
|
function getOmeLegacyIndexer(tiff, rootMeta) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
10
|
+
const imgMeta = rootMeta[0];
|
|
11
|
+
const {
|
|
12
|
+
SizeT,
|
|
13
|
+
SizeC,
|
|
14
|
+
SizeZ
|
|
15
|
+
} = imgMeta.Pixels;
|
|
16
|
+
const ifdIndexer = getOmeIFDIndexer(imgMeta);
|
|
17
|
+
return (sel, pyramidLevel) => {
|
|
18
|
+
const index = ifdIndexer(sel);
|
|
19
|
+
const pyramidIndex = pyramidLevel * SizeZ * SizeT * SizeC;
|
|
25
20
|
return tiff.getImage(index + pyramidIndex);
|
|
26
21
|
};
|
|
27
22
|
}
|
|
28
23
|
|
|
29
24
|
function getOmeSubIFDIndexer(tiff, rootMeta) {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
return
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
break;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
throw Error('Indexing Error: OME-TIFF is missing SubIFDs.');
|
|
63
|
-
|
|
64
|
-
case 9:
|
|
65
|
-
key = "".concat(sel.t, "-").concat(sel.c, "-").concat(sel.z, "-").concat(pyramidLevel);
|
|
66
|
-
|
|
67
|
-
if (!ifdCache.has(key)) {
|
|
68
|
-
subIfdOffset = SubIFDs[pyramidLevel - 1];
|
|
69
|
-
ifdCache.set(key, tiff.parseFileDirectoryAt(subIfdOffset));
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
_context.next = 13;
|
|
73
|
-
return ifdCache.get(key);
|
|
74
|
-
|
|
75
|
-
case 13:
|
|
76
|
-
ifd = _context.sent;
|
|
77
|
-
return _context.abrupt("return", new baseImage.constructor(ifd.fileDirectory, ifd.geoKeyDirectory, tiff.dataView, tiff.littleEndian, tiff.cache, tiff.source));
|
|
78
|
-
|
|
79
|
-
case 15:
|
|
80
|
-
case "end":
|
|
81
|
-
return _context.stop();
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
}, _callee);
|
|
85
|
-
}));
|
|
86
|
-
|
|
87
|
-
return function (_x, _x2) {
|
|
88
|
-
return _ref.apply(this, arguments);
|
|
89
|
-
};
|
|
90
|
-
}();
|
|
25
|
+
const imgMeta = rootMeta[0];
|
|
26
|
+
const ifdIndexer = getOmeIFDIndexer(imgMeta);
|
|
27
|
+
const ifdCache = new Map();
|
|
28
|
+
return async (sel, pyramidLevel) => {
|
|
29
|
+
const index = ifdIndexer(sel);
|
|
30
|
+
const baseImage = await tiff.getImage(index);
|
|
31
|
+
|
|
32
|
+
if (pyramidLevel === 0) {
|
|
33
|
+
return baseImage;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const {
|
|
37
|
+
SubIFDs
|
|
38
|
+
} = baseImage.fileDirectory;
|
|
39
|
+
|
|
40
|
+
if (!SubIFDs) {
|
|
41
|
+
throw Error('Indexing Error: OME-TIFF is missing SubIFDs.');
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const key = "".concat(sel.t, "-").concat(sel.c, "-").concat(sel.z, "-").concat(pyramidLevel);
|
|
45
|
+
|
|
46
|
+
if (!ifdCache.has(key)) {
|
|
47
|
+
const subIfdOffset = SubIFDs[pyramidLevel - 1];
|
|
48
|
+
ifdCache.set(key, tiff.parseFileDirectoryAt(subIfdOffset));
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const ifd = await ifdCache.get(key);
|
|
52
|
+
return new baseImage.constructor(ifd.fileDirectory, ifd.geoKeyDirectory, tiff.dataView, tiff.littleEndian, tiff.cache, tiff.source);
|
|
53
|
+
};
|
|
91
54
|
}
|
|
92
55
|
|
|
93
56
|
function getOmeIFDIndexer(imgMeta) {
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
57
|
+
const {
|
|
58
|
+
SizeC,
|
|
59
|
+
SizeZ,
|
|
60
|
+
SizeT,
|
|
61
|
+
DimensionOrder
|
|
62
|
+
} = imgMeta.Pixels;
|
|
99
63
|
|
|
100
64
|
switch (DimensionOrder) {
|
|
101
65
|
case 'XYZCT':
|
|
102
66
|
{
|
|
103
|
-
return
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
};
|
|
67
|
+
return ({
|
|
68
|
+
t,
|
|
69
|
+
c,
|
|
70
|
+
z
|
|
71
|
+
}) => t * SizeZ * SizeC + c * SizeZ + z;
|
|
109
72
|
}
|
|
110
73
|
|
|
111
74
|
case 'XYZTC':
|
|
112
75
|
{
|
|
113
|
-
return
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
};
|
|
76
|
+
return ({
|
|
77
|
+
t,
|
|
78
|
+
c,
|
|
79
|
+
z
|
|
80
|
+
}) => c * SizeZ * SizeT + t * SizeZ + z;
|
|
119
81
|
}
|
|
120
82
|
|
|
121
83
|
case 'XYCTZ':
|
|
122
84
|
{
|
|
123
|
-
return
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
};
|
|
85
|
+
return ({
|
|
86
|
+
t,
|
|
87
|
+
c,
|
|
88
|
+
z
|
|
89
|
+
}) => z * SizeC * SizeT + t * SizeC + c;
|
|
129
90
|
}
|
|
130
91
|
|
|
131
92
|
case 'XYCZT':
|
|
132
93
|
{
|
|
133
|
-
return
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
};
|
|
94
|
+
return ({
|
|
95
|
+
t,
|
|
96
|
+
c,
|
|
97
|
+
z
|
|
98
|
+
}) => t * SizeC * SizeZ + z * SizeC + c;
|
|
139
99
|
}
|
|
140
100
|
|
|
141
101
|
case 'XYTCZ':
|
|
142
102
|
{
|
|
143
|
-
return
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
};
|
|
103
|
+
return ({
|
|
104
|
+
t,
|
|
105
|
+
c,
|
|
106
|
+
z
|
|
107
|
+
}) => z * SizeT * SizeC + c * SizeT + t;
|
|
149
108
|
}
|
|
150
109
|
|
|
151
110
|
case 'XYTZC':
|
|
152
111
|
{
|
|
153
|
-
return
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
};
|
|
112
|
+
return ({
|
|
113
|
+
t,
|
|
114
|
+
c,
|
|
115
|
+
z
|
|
116
|
+
}) => c * SizeT * SizeZ + z * SizeT + t;
|
|
159
117
|
}
|
|
160
118
|
|
|
161
119
|
default:
|