@cogeotiff/core 9.2.0 → 9.3.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/CHANGELOG.md +15 -0
- package/build/__benchmark__/cog.read.benchmark.js +4 -2
- package/build/__benchmark__/source.file.d.ts +4 -0
- package/build/__benchmark__/source.file.d.ts.map +1 -1
- package/build/__benchmark__/source.file.js +2 -0
- package/build/__test__/cog.read.test.js +81 -1
- package/build/const/tiff.tag.id.d.ts +12 -5
- package/build/const/tiff.tag.id.d.ts.map +1 -1
- package/build/const/tiff.tag.id.js +8 -0
- package/build/index.d.ts +3 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -1
- package/build/read/endian.d.ts +2 -0
- package/build/read/endian.d.ts.map +1 -0
- package/build/read/endian.js +5 -0
- package/build/read/tiff.tag.d.ts +1 -1
- package/build/read/tiff.tag.d.ts.map +1 -1
- package/build/read/tiff.tag.factory.d.ts +14 -1
- package/build/read/tiff.tag.factory.d.ts.map +1 -1
- package/build/read/tiff.tag.factory.js +60 -3
- package/build/tiff.d.ts +6 -2
- package/build/tiff.d.ts.map +1 -1
- package/build/tiff.image.d.ts +3 -0
- package/build/tiff.image.d.ts.map +1 -1
- package/build/tiff.image.js +23 -6
- package/build/tiff.js +4 -3
- package/package.json +2 -2
- package/src/__benchmark__/cog.read.benchmark.ts +4 -2
- package/src/__benchmark__/source.file.ts +2 -0
- package/src/__test__/cog.read.test.ts +107 -2
- package/src/const/tiff.tag.id.ts +13 -5
- package/src/index.ts +3 -0
- package/src/read/endian.ts +6 -0
- package/src/read/tiff.tag.factory.ts +73 -3
- package/src/read/tiff.tag.ts +1 -1
- package/src/tiff.image.ts +23 -6
- package/src/tiff.ts +12 -3
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## [9.3.0](https://github.com/blacha/cogeotiff/compare/core-v9.2.0...core-v9.3.0) (2026-02-20)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* Add Predictor enum ([#1412](https://github.com/blacha/cogeotiff/issues/1412)) ([d66d251](https://github.com/blacha/cogeotiff/commit/d66d251eda3c9a372aa3e24092fbf042e0097bb8))
|
|
9
|
+
* **core:** add default read size as a optional arg ([a025899](https://github.com/blacha/cogeotiff/commit/a0258994fd488237156949c579221fccc8ffc137))
|
|
10
|
+
* typed arrays for tile offset and byte counts ([#1410](https://github.com/blacha/cogeotiff/issues/1410)) ([733f066](https://github.com/blacha/cogeotiff/commit/733f066ac1d3177b70003c36c07eb776be5b170e))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Performance Improvements
|
|
14
|
+
|
|
15
|
+
* **core:** improve tile loading performance for big tiff ([9848601](https://github.com/blacha/cogeotiff/commit/9848601931004ea9f97c146af981605a4f71f32e))
|
|
16
|
+
* **core:** use the byte count array if it is loaded ([#1415](https://github.com/blacha/cogeotiff/issues/1415)) ([8f16769](https://github.com/blacha/cogeotiff/commit/8f16769e4f485510916e6807e2a2e2a5da9f70cf))
|
|
17
|
+
|
|
3
18
|
## [9.2.0](https://github.com/blacha/cogeotiff/compare/core-v9.1.2...core-v9.2.0) (2026-02-18)
|
|
4
19
|
|
|
5
20
|
|
|
@@ -2,6 +2,7 @@ import { readFile } from 'fs/promises';
|
|
|
2
2
|
import { TiffTag } from '../index.js';
|
|
3
3
|
import { Tiff } from '../tiff.js';
|
|
4
4
|
import { SourceMemory } from './source.memory.js';
|
|
5
|
+
Tiff.DefaultReadSize = 64 * 1024;
|
|
5
6
|
// console.log = console.trace;
|
|
6
7
|
/** Read a tile from every image inside of a tiff 300 tiles read */
|
|
7
8
|
async function main() {
|
|
@@ -15,9 +16,10 @@ async function main() {
|
|
|
15
16
|
// 6 images
|
|
16
17
|
for (const img of tiff.images)
|
|
17
18
|
await img.getTile(0, 0);
|
|
19
|
+
const img = tiff.images[0];
|
|
18
20
|
// Force loading all the byte arrays in which benchmarks the bulk array loading
|
|
19
|
-
await
|
|
20
|
-
await
|
|
21
|
+
await img.fetch(TiffTag.TileByteCounts);
|
|
22
|
+
await img.fetch(TiffTag.TileOffsets);
|
|
21
23
|
}
|
|
22
24
|
}
|
|
23
25
|
void main();
|
|
@@ -2,6 +2,10 @@ import type { Source } from '../source.js';
|
|
|
2
2
|
export declare class TestFileSource implements Source {
|
|
3
3
|
url: URL;
|
|
4
4
|
data: Promise<Buffer>;
|
|
5
|
+
fetches: {
|
|
6
|
+
offset: number;
|
|
7
|
+
length: number;
|
|
8
|
+
}[];
|
|
5
9
|
constructor(fileName: URL);
|
|
6
10
|
fetch(offset: number, length: number): Promise<ArrayBuffer>;
|
|
7
11
|
get size(): Promise<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.file.d.ts","sourceRoot":"","sources":["../../src/__benchmark__/source.file.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,qBAAa,cAAe,YAAW,MAAM;IAC3C,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"source.file.d.ts","sourceRoot":"","sources":["../../src/__benchmark__/source.file.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAI3C,qBAAa,cAAe,YAAW,MAAM;IAC3C,GAAG,EAAE,GAAG,CAAC;IACT,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACtB,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAM;gBAEvC,QAAQ,EAAE,GAAG;IAQnB,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAMjE,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAI1B;CACF"}
|
|
@@ -5,6 +5,7 @@ const gunzipP = promisify(gunzip);
|
|
|
5
5
|
export class TestFileSource {
|
|
6
6
|
url;
|
|
7
7
|
data;
|
|
8
|
+
fetches = [];
|
|
8
9
|
constructor(fileName) {
|
|
9
10
|
this.url = fileName;
|
|
10
11
|
this.data = readFile(this.url).then((buf) => {
|
|
@@ -15,6 +16,7 @@ export class TestFileSource {
|
|
|
15
16
|
}
|
|
16
17
|
async fetch(offset, length) {
|
|
17
18
|
const fileData = await this.data;
|
|
19
|
+
this.fetches.push({ offset, length });
|
|
18
20
|
return fileData.buffer.slice(fileData.byteOffset + offset, fileData.byteOffset + offset + length);
|
|
19
21
|
}
|
|
20
22
|
get size() {
|
|
@@ -24,6 +24,8 @@ describe('CogRead', () => {
|
|
|
24
24
|
assert.equal(tiff.version, TiffVersion.Tiff);
|
|
25
25
|
assert.equal(tiff.images.length, 1);
|
|
26
26
|
const firstImage = tiff.images[0];
|
|
27
|
+
const byteCounts = await firstImage.fetch(TiffTag.TileByteCounts);
|
|
28
|
+
assert.deepEqual([...(byteCounts ?? [])], [511]);
|
|
27
29
|
assert.equal(firstImage.compression, 'application/zstd');
|
|
28
30
|
assert.equal(firstImage.isTiled(), true);
|
|
29
31
|
const firstTile = await firstImage.getTile(0, 0);
|
|
@@ -37,6 +39,12 @@ describe('CogRead', () => {
|
|
|
37
39
|
assert.equal(tiff.version, TiffVersion.BigTiff);
|
|
38
40
|
assert.equal(tiff.images[0].epsg, null);
|
|
39
41
|
validate(tiff);
|
|
42
|
+
const [byteCounts, tileOffsets] = await Promise.all([
|
|
43
|
+
tiff.images[0].fetch(TiffTag.TileByteCounts),
|
|
44
|
+
tiff.images[0].fetch(TiffTag.TileOffsets),
|
|
45
|
+
]);
|
|
46
|
+
assert.deepEqual([...(byteCounts ?? [])], [196608]);
|
|
47
|
+
assert.deepEqual([...(tileOffsets ?? [])], [272]);
|
|
40
48
|
});
|
|
41
49
|
it('should fail reading a empty byte tiff', async () => {
|
|
42
50
|
const source = new SourceMemory(Buffer.from(''));
|
|
@@ -66,6 +74,71 @@ describe('CogRead', () => {
|
|
|
66
74
|
await tiff.init();
|
|
67
75
|
assert.equal(tiff.images.length, 5);
|
|
68
76
|
});
|
|
77
|
+
it('should read the byte count array if it is loaded', async () => {
|
|
78
|
+
const source = new TestFileSource(new URL('../../data/rgba8_cog.tiff', import.meta.url));
|
|
79
|
+
const fetchSize = 16 * 1024;
|
|
80
|
+
const tiff = new Tiff(source);
|
|
81
|
+
tiff.defaultReadSize = fetchSize;
|
|
82
|
+
await tiff.init();
|
|
83
|
+
assert.equal(source.fetches.length, 1);
|
|
84
|
+
assert.equal(source.fetches[0].length, fetchSize);
|
|
85
|
+
const img = tiff.images[0];
|
|
86
|
+
const byteCounts = img.tags.get(TiffTag.TileByteCounts);
|
|
87
|
+
const tileOffsets = img.tags.get(TiffTag.TileOffsets);
|
|
88
|
+
assert.equal(source.fetches.length, 1);
|
|
89
|
+
assert.equal(byteCounts.type, 'offset');
|
|
90
|
+
assert.equal(byteCounts.isLoaded, true);
|
|
91
|
+
assert.equal(tileOffsets.type, 'offset');
|
|
92
|
+
assert.equal(tileOffsets.isLoaded, true);
|
|
93
|
+
const tile = await img.getTile(0, 0);
|
|
94
|
+
assert.equal(tile?.bytes.byteLength, byteCounts.value[0]);
|
|
95
|
+
assert.equal(source.fetches.length, 2);
|
|
96
|
+
assert.deepEqual(source.fetches[1], { offset: tileOffsets.value[0], length: byteCounts.value[0] });
|
|
97
|
+
// force the offset to be unloaded
|
|
98
|
+
byteCounts.isLoaded = false;
|
|
99
|
+
const oldValue = byteCounts.value;
|
|
100
|
+
byteCounts.value = [];
|
|
101
|
+
const tileB = await img.getTile(0, 0);
|
|
102
|
+
assert.equal(tileB?.bytes.byteLength, oldValue[0]);
|
|
103
|
+
assert.equal(source.fetches.length, 4);
|
|
104
|
+
// Read the tile offset then the tile
|
|
105
|
+
assert.deepEqual(source.fetches[2], { offset: tileOffsets.value[0] - 4, length: 4 });
|
|
106
|
+
assert.deepEqual(source.fetches[3], { offset: tileOffsets.value[0], length: oldValue[0] });
|
|
107
|
+
});
|
|
108
|
+
it('should read the byte count array if it is loaded (BigTiff)', async () => {
|
|
109
|
+
const source = new TestFileSource(new URL('../../data/rgba8_cog_big.tiff', import.meta.url));
|
|
110
|
+
const fetchSize = 16 * 1024;
|
|
111
|
+
const tiff = new Tiff(source);
|
|
112
|
+
tiff.defaultReadSize = fetchSize;
|
|
113
|
+
await tiff.init();
|
|
114
|
+
assert.equal(source.fetches.length, 1);
|
|
115
|
+
assert.equal(source.fetches[0].length, fetchSize);
|
|
116
|
+
const img = tiff.images[0];
|
|
117
|
+
const byteCounts = img.tags.get(TiffTag.TileByteCounts);
|
|
118
|
+
const tileOffsets = img.tags.get(TiffTag.TileOffsets);
|
|
119
|
+
assert.equal(source.fetches.length, 1);
|
|
120
|
+
assert.equal(byteCounts.type, 'offset');
|
|
121
|
+
assert.equal(byteCounts.isLoaded, true);
|
|
122
|
+
assert.equal(byteCounts.view == null, true);
|
|
123
|
+
assert.equal(tileOffsets.type, 'offset');
|
|
124
|
+
assert.equal(tileOffsets.isLoaded, false);
|
|
125
|
+
assert.equal(tileOffsets.view == null, false);
|
|
126
|
+
const tile = await img.getTile(0, 0);
|
|
127
|
+
assert.equal(tile?.bytes.byteLength, byteCounts.value[0]);
|
|
128
|
+
assert.equal(source.fetches.length, 2);
|
|
129
|
+
assert.deepEqual(source.fetches[1], { offset: tileOffsets.value[0], length: byteCounts.value[0] });
|
|
130
|
+
// force the offset to be unloaded
|
|
131
|
+
byteCounts.isLoaded = false;
|
|
132
|
+
const oldValue = byteCounts.value;
|
|
133
|
+
byteCounts.value = [];
|
|
134
|
+
byteCounts.view = undefined;
|
|
135
|
+
const tileB = await img.getTile(0, 0);
|
|
136
|
+
assert.equal(tileB?.bytes.byteLength, oldValue[0]);
|
|
137
|
+
assert.equal(source.fetches.length, 4);
|
|
138
|
+
// Read the tile offset then the tile
|
|
139
|
+
assert.deepEqual(source.fetches[2], { offset: tileOffsets.value[0] - 4, length: 4 });
|
|
140
|
+
assert.deepEqual(source.fetches[3], { offset: tileOffsets.value[0], length: oldValue[0] });
|
|
141
|
+
});
|
|
69
142
|
it('should read ifds from anywhere in the file', async () => {
|
|
70
143
|
const source = new TestFileSource(new URL('../../data/DEM_BS28_2016_1000_1141.tif', import.meta.url));
|
|
71
144
|
const tiff = await Tiff.create(source);
|
|
@@ -83,7 +156,8 @@ describe('CogRead', () => {
|
|
|
83
156
|
assert.equal(im.noData, -9999);
|
|
84
157
|
assert.equal(im.valueGeo(TiffTagGeo.GTCitationGeoKey), 'NZGD2000 / New Zealand Transverse Mercator 2000');
|
|
85
158
|
assert.equal(im.valueGeo(TiffTagGeo.GeodeticCitationGeoKey), 'NZGD2000');
|
|
86
|
-
|
|
159
|
+
const stripCount = await im.fetch(TiffTag.StripByteCounts);
|
|
160
|
+
assert.deepEqual([...(stripCount ?? [])], [8064, 8064, 8064, 8064, 8064, 8064, 8064, 5040]);
|
|
87
161
|
});
|
|
88
162
|
it('should read sub array ifds', async () => {
|
|
89
163
|
const source = new TestFileSource(new URL('../../data/east_coast_phase3_2023_AY31_1000_3335.tif.gz', import.meta.url));
|
|
@@ -128,5 +202,11 @@ describe('CogRead', () => {
|
|
|
128
202
|
const tiff = await Tiff.create(source);
|
|
129
203
|
assert.equal(tiff.images.length, 5);
|
|
130
204
|
assert.equal(tiff.images[0].epsg, 3857);
|
|
205
|
+
const [byteCounts, tileOffsets] = await Promise.all([
|
|
206
|
+
tiff.images[0].fetch(TiffTag.TileByteCounts),
|
|
207
|
+
tiff.images[0].fetch(TiffTag.TileOffsets),
|
|
208
|
+
]);
|
|
209
|
+
assert.deepEqual([...(byteCounts ?? [])], [64, 64, 68, 64, 64, 68, 64, 64, 68, 64, 64, 64, 64, 64, 64, 68]);
|
|
210
|
+
assert.deepEqual([...(tileOffsets ?? [])], [797, 861, 925, 993, 1057, 1121, 1189, 1253, 1317, 1385, 1449, 1513, 1577, 1641, 1705, 1769]);
|
|
131
211
|
});
|
|
132
212
|
});
|
|
@@ -69,6 +69,13 @@ export declare enum PlanarConfiguration {
|
|
|
69
69
|
/** separate planes of data */
|
|
70
70
|
Separate = 2
|
|
71
71
|
}
|
|
72
|
+
export declare enum Predictor {
|
|
73
|
+
None = 1,
|
|
74
|
+
/** Horizontal differencing */
|
|
75
|
+
Horizontal = 2,
|
|
76
|
+
/** Floating point */
|
|
77
|
+
FloatingPoint = 3
|
|
78
|
+
}
|
|
72
79
|
export declare enum SampleFormat {
|
|
73
80
|
/** Unsigned integer data */
|
|
74
81
|
Uint = 1,
|
|
@@ -374,11 +381,11 @@ export interface TiffTagType {
|
|
|
374
381
|
[TiffTag.Photometric]: Photometric;
|
|
375
382
|
[TiffTag.TileWidth]: number;
|
|
376
383
|
[TiffTag.TileHeight]: number;
|
|
377
|
-
[TiffTag.TileOffsets]: number[];
|
|
378
|
-
[TiffTag.TileByteCounts]: number[];
|
|
384
|
+
[TiffTag.TileOffsets]: number[] | Uint32Array | Uint16Array;
|
|
385
|
+
[TiffTag.TileByteCounts]: number[] | Uint32Array | Uint16Array;
|
|
379
386
|
[TiffTag.JpegTables]: number[];
|
|
380
|
-
[TiffTag.StripByteCounts]: number[];
|
|
381
|
-
[TiffTag.StripOffsets]: number[];
|
|
387
|
+
[TiffTag.StripByteCounts]: number[] | Uint32Array | Uint16Array;
|
|
388
|
+
[TiffTag.StripOffsets]: number[] | Uint32Array | Uint16Array;
|
|
382
389
|
[TiffTag.SamplesPerPixel]: number;
|
|
383
390
|
[TiffTag.SampleFormat]: SampleFormat[];
|
|
384
391
|
[TiffTag.GdalMetadata]: string;
|
|
@@ -391,6 +398,7 @@ export interface TiffTagType {
|
|
|
391
398
|
[TiffTag.GeoAsciiParams]: string;
|
|
392
399
|
[TiffTag.PlanarConfiguration]: PlanarConfiguration;
|
|
393
400
|
[TiffTag.Orientation]: Orientation;
|
|
401
|
+
[TiffTag.Predictor]: Predictor;
|
|
394
402
|
[TiffTag.LercParameters]: number[];
|
|
395
403
|
[TiffTag.CellLength]: unknown;
|
|
396
404
|
[TiffTag.CellWidth]: unknown;
|
|
@@ -427,7 +435,6 @@ export interface TiffTagType {
|
|
|
427
435
|
[TiffTag.Indexed]: unknown;
|
|
428
436
|
[TiffTag.PageName]: unknown;
|
|
429
437
|
[TiffTag.PageNumber]: unknown;
|
|
430
|
-
[TiffTag.Predictor]: unknown;
|
|
431
438
|
[TiffTag.PrimaryChromaticities]: unknown;
|
|
432
439
|
[TiffTag.ReferenceBlackWhite]: unknown;
|
|
433
440
|
[TiffTag.SMinSampleValue]: unknown;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiff.tag.id.d.ts","sourceRoot":"","sources":["../../src/const/tiff.tag.id.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"tiff.tag.id.d.ts","sourceRoot":"","sources":["../../src/const/tiff.tag.id.ts"],"names":[],"mappings":"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"}
|
|
@@ -84,6 +84,14 @@ export var PlanarConfiguration;
|
|
|
84
84
|
/** separate planes of data */
|
|
85
85
|
PlanarConfiguration[PlanarConfiguration["Separate"] = 2] = "Separate";
|
|
86
86
|
})(PlanarConfiguration || (PlanarConfiguration = {}));
|
|
87
|
+
export var Predictor;
|
|
88
|
+
(function (Predictor) {
|
|
89
|
+
Predictor[Predictor["None"] = 1] = "None";
|
|
90
|
+
/** Horizontal differencing */
|
|
91
|
+
Predictor[Predictor["Horizontal"] = 2] = "Horizontal";
|
|
92
|
+
/** Floating point */
|
|
93
|
+
Predictor[Predictor["FloatingPoint"] = 3] = "FloatingPoint";
|
|
94
|
+
})(Predictor || (Predictor = {}));
|
|
87
95
|
export var SampleFormat;
|
|
88
96
|
(function (SampleFormat) {
|
|
89
97
|
/** Unsigned integer data */
|
package/build/index.d.ts
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
export { TiffEndian } from './const/tiff.endian.js';
|
|
2
2
|
export { TiffCompressionMimeType as TiffCompression, TiffMimeType } from './const/tiff.mime.js';
|
|
3
3
|
export type { TiffTagGeoType, TiffTagType } from './const/tiff.tag.id.js';
|
|
4
|
-
export { AngularUnit, Compression, LinearUnit, ModelTypeCode, OldSubFileType, Orientation, Photometric, PlanarConfiguration, RasterTypeKey, SampleFormat, SubFileType, TiffTag, TiffTagGeo, } from './const/tiff.tag.id.js';
|
|
4
|
+
export { AngularUnit, Compression, LinearUnit, ModelTypeCode, OldSubFileType, Orientation, Photometric, PlanarConfiguration, Predictor, RasterTypeKey, SampleFormat, SubFileType, TiffTag, TiffTagGeo, } from './const/tiff.tag.id.js';
|
|
5
5
|
export { TiffTagValueType } from './const/tiff.tag.value.js';
|
|
6
6
|
export { TiffVersion } from './const/tiff.version.js';
|
|
7
7
|
export type { Tag, TagInline, TagLazy, TagOffset } from './read/tiff.tag.js';
|
|
8
8
|
export { getTiffTagSize } from './read/tiff.value.reader.js';
|
|
9
9
|
export type { Source } from './source.js';
|
|
10
|
+
export type { TiffImageTileCount } from './tiff.image.js';
|
|
10
11
|
export { TiffImage } from './tiff.image.js';
|
|
12
|
+
export type { TiffCreationOptions } from './tiff.js';
|
|
11
13
|
export { Tiff } from './tiff.js';
|
|
12
14
|
export { toHex } from './util/util.hex.js';
|
|
13
15
|
export type { BoundingBox, Point, Size, Vector } from './vector.js';
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,uBAAuB,IAAI,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAChG,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1E,OAAO,EACL,WAAW,EACX,WAAW,EACX,UAAU,EACV,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,aAAa,EACb,YAAY,EACZ,WAAW,EACX,OAAO,EACP,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,uBAAuB,IAAI,eAAe,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAChG,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAE1E,OAAO,EACL,WAAW,EACX,WAAW,EACX,UAAU,EACV,aAAa,EACb,cAAc,EACd,WAAW,EACX,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,aAAa,EACb,YAAY,EACZ,WAAW,EACX,OAAO,EACP,UAAU,GACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,YAAY,EAAE,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC7E,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,YAAY,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,YAAY,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC3C,YAAY,EAAE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC"}
|
package/build/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export { TiffEndian } from './const/tiff.endian.js';
|
|
2
2
|
export { TiffCompressionMimeType as TiffCompression, TiffMimeType } from './const/tiff.mime.js';
|
|
3
3
|
// Tag value constants
|
|
4
|
-
export { AngularUnit, Compression, LinearUnit, ModelTypeCode, OldSubFileType, Orientation, Photometric, PlanarConfiguration, RasterTypeKey, SampleFormat, SubFileType, TiffTag, TiffTagGeo, } from './const/tiff.tag.id.js';
|
|
4
|
+
export { AngularUnit, Compression, LinearUnit, ModelTypeCode, OldSubFileType, Orientation, Photometric, PlanarConfiguration, Predictor, RasterTypeKey, SampleFormat, SubFileType, TiffTag, TiffTagGeo, } from './const/tiff.tag.id.js';
|
|
5
5
|
export { TiffTagValueType } from './const/tiff.tag.value.js';
|
|
6
6
|
export { TiffVersion } from './const/tiff.version.js';
|
|
7
7
|
export { getTiffTagSize } from './read/tiff.value.reader.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"endian.d.ts","sourceRoot":"","sources":["../../src/read/endian.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,cAAc,SAAiB,CAAC"}
|
package/build/read/tiff.tag.d.ts
CHANGED
|
@@ -33,7 +33,7 @@ export interface TagInline<T> extends TagBase {
|
|
|
33
33
|
export interface TagOffset extends TagBase {
|
|
34
34
|
type: 'offset';
|
|
35
35
|
/** Values of the offsets this is a sparse array unless @see {TagOffset.isLoaded} is true */
|
|
36
|
-
value: number[];
|
|
36
|
+
value: number[] | Uint32Array | Uint16Array;
|
|
37
37
|
/** Have all the values been read */
|
|
38
38
|
isLoaded: boolean;
|
|
39
39
|
/** Raw buffer of the values for lazy decoding, as reading 100,000s of uint64s can take quite a long time */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiff.tag.d.ts","sourceRoot":"","sources":["../../src/read/tiff.tag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,0BAA0B;AAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AAErE,MAAM,WAAW,OAAO;IACtB,oBAAoB;IACpB,EAAE,EAAE,OAAO,CAAC;IACZ,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,2EAA2E;AAC3E,MAAM,WAAW,OAAO,CAAC,CAAC,CAAE,SAAQ,OAAO;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,MAAM,WAAW,SAAS,CAAC,CAAC,CAAE,SAAQ,OAAO;IAC3C,IAAI,EAAE,QAAQ,CAAC;IACf,uBAAuB;IACvB,KAAK,EAAE,CAAC,CAAC;CACV;AAED,oEAAoE;AACpE,MAAM,WAAW,SAAU,SAAQ,OAAO;IACxC,IAAI,EAAE,QAAQ,CAAC;IACf,4FAA4F;IAC5F,KAAK,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"tiff.tag.d.ts","sourceRoot":"","sources":["../../src/read/tiff.tag.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAE5D,0BAA0B;AAC1B,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;AAErE,MAAM,WAAW,OAAO;IACtB,oBAAoB;IACpB,EAAE,EAAE,OAAO,CAAC;IACZ,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,SAAS,EAAE,MAAM,CAAC;IAClB,uBAAuB;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,gDAAgD;IAChD,QAAQ,EAAE,gBAAgB,CAAC;CAC5B;AAED,2EAA2E;AAC3E,MAAM,WAAW,OAAO,CAAC,CAAC,CAAE,SAAQ,OAAO;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,0CAA0C;IAC1C,KAAK,CAAC,EAAE,CAAC,CAAC;IACV,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,kEAAkE;AAClE,MAAM,WAAW,SAAS,CAAC,CAAC,CAAE,SAAQ,OAAO;IAC3C,IAAI,EAAE,QAAQ,CAAC;IACf,uBAAuB;IACvB,KAAK,EAAE,CAAC,CAAC;CACV;AAED,oEAAoE;AACpE,MAAM,WAAW,SAAU,SAAQ,OAAO;IACxC,IAAI,EAAE,QAAQ,CAAC;IACf,4FAA4F;IAC5F,KAAK,EAAE,MAAM,EAAE,GAAG,WAAW,GAAG,WAAW,CAAC;IAC5C,oCAAoC;IACpC,QAAQ,EAAE,OAAO,CAAC;IAClB,4GAA4G;IAC5G,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,+CAA+C;IAC/C,UAAU,EAAE,MAAM,CAAC;CACpB"}
|
|
@@ -1,6 +1,18 @@
|
|
|
1
|
+
import { TiffTagValueType } from '../const/tiff.tag.value.js';
|
|
1
2
|
import type { Tiff } from '../tiff.js';
|
|
2
3
|
import type { DataViewOffset } from './data.view.offset.js';
|
|
3
4
|
import type { Tag, TagLazy, TagOffset } from './tiff.tag.js';
|
|
5
|
+
/**
|
|
6
|
+
* Convert a tiff tag value to a typed array if the local endian matches the tiff endian
|
|
7
|
+
*
|
|
8
|
+
* @param tiff
|
|
9
|
+
* @param bytes
|
|
10
|
+
* @param offset Offset in the data view to read from
|
|
11
|
+
* @param length Number of bytes to read
|
|
12
|
+
* @param type type of tiff tag
|
|
13
|
+
* @returns the value if the type is a typed array and the endianness matches otherwise null
|
|
14
|
+
*/
|
|
15
|
+
export declare function readTypedValue<T>(tiff: Tiff, bytes: DataView, offset: number, length: number, type: TiffTagValueType): T | null;
|
|
4
16
|
/**
|
|
5
17
|
* Determine if all the data for the tiff tag is loaded in and use that to create the specific CogTiffTag
|
|
6
18
|
*
|
|
@@ -16,8 +28,9 @@ export declare function fetchLazy<T>(tag: TagLazy<T>, tiff: Tiff): Promise<T>;
|
|
|
16
28
|
/**
|
|
17
29
|
* Fetch all the values from a {@link TagOffset}
|
|
18
30
|
*/
|
|
19
|
-
export declare function fetchAllOffsets(tiff: Tiff, tag: TagOffset): Promise<
|
|
31
|
+
export declare function fetchAllOffsets(tiff: Tiff, tag: TagOffset): Promise<TagOffset['value']>;
|
|
20
32
|
export declare function setBytes(tag: TagOffset, view: DataViewOffset): void;
|
|
21
33
|
/** Partially fetch the values of a {@link TagOffset} and return the value for the offset */
|
|
22
34
|
export declare function getValueAt(tiff: Tiff, tag: TagOffset, index: number): Promise<number>;
|
|
35
|
+
export declare function getValueAtSync(tiff: Tiff, tag: TagOffset, index: number): number | null;
|
|
23
36
|
//# sourceMappingURL=tiff.tag.factory.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiff.tag.factory.d.ts","sourceRoot":"","sources":["../../src/read/tiff.tag.factory.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tiff.tag.factory.d.ts","sourceRoot":"","sources":["../../src/read/tiff.tag.factory.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAC9D,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAEvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,KAAK,EAAE,GAAG,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAoD7D;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAC9B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,QAAQ,EACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,gBAAgB,GACrB,CAAC,GAAG,IAAI,CAkBV;AAgDD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAqDxF;AAED,iDAAiD;AACjD,wBAAsB,SAAS,CAAC,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,CAQ1E;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAa7F;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,GAAG,IAAI,CAKnE;AAED,4FAA4F;AAC5F,wBAAsB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoB3F;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUvF"}
|
|
@@ -3,6 +3,7 @@ import { TiffTag, TiffTagConvertArray } from '../const/tiff.tag.id.js';
|
|
|
3
3
|
import { TiffTagValueType } from '../const/tiff.tag.value.js';
|
|
4
4
|
import { getUint, getUint64 } from '../util/bytes.js';
|
|
5
5
|
import { hasBytes } from './data.view.offset.js';
|
|
6
|
+
import { isLittleEndian } from './endian.js';
|
|
6
7
|
import { getTiffTagSize } from './tiff.value.reader.js';
|
|
7
8
|
function readTagValue(fieldType, bytes, offset, isLittleEndian) {
|
|
8
9
|
switch (fieldType) {
|
|
@@ -36,6 +37,31 @@ function readTagValue(fieldType, bytes, offset, isLittleEndian) {
|
|
|
36
37
|
throw new Error(`Unknown read type "${fieldType}" "${TiffTagValueType[fieldType]}"`);
|
|
37
38
|
}
|
|
38
39
|
}
|
|
40
|
+
/**
|
|
41
|
+
* Convert a tiff tag value to a typed array if the local endian matches the tiff endian
|
|
42
|
+
*
|
|
43
|
+
* @param tiff
|
|
44
|
+
* @param bytes
|
|
45
|
+
* @param offset Offset in the data view to read from
|
|
46
|
+
* @param length Number of bytes to read
|
|
47
|
+
* @param type type of tiff tag
|
|
48
|
+
* @returns the value if the type is a typed array and the endianness matches otherwise null
|
|
49
|
+
*/
|
|
50
|
+
export function readTypedValue(tiff, bytes, offset, length, type) {
|
|
51
|
+
switch (type) {
|
|
52
|
+
case TiffTagValueType.Uint8:
|
|
53
|
+
return new Uint8Array(bytes.buffer.slice(bytes.byteOffset + offset, bytes.byteOffset + offset + length));
|
|
54
|
+
case TiffTagValueType.Uint16:
|
|
55
|
+
if (tiff.isLittleEndian !== isLittleEndian)
|
|
56
|
+
return null;
|
|
57
|
+
return new Uint16Array(bytes.buffer.slice(bytes.byteOffset + offset, bytes.byteOffset + offset + length));
|
|
58
|
+
case TiffTagValueType.Uint32:
|
|
59
|
+
if (tiff.isLittleEndian !== isLittleEndian)
|
|
60
|
+
return null;
|
|
61
|
+
return new Uint32Array(bytes.buffer.slice(bytes.byteOffset + offset, bytes.byteOffset + offset + length));
|
|
62
|
+
}
|
|
63
|
+
return null;
|
|
64
|
+
}
|
|
39
65
|
function readValue(tiff, tagId, bytes, offset, type, count) {
|
|
40
66
|
const typeSize = getTiffTagSize(type);
|
|
41
67
|
const dataLength = count * typeSize;
|
|
@@ -51,6 +77,15 @@ function readValue(tiff, tagId, bytes, offset, type, count) {
|
|
|
51
77
|
case TiffTagValueType.Ascii:
|
|
52
78
|
return String.fromCharCode.apply(null, new Uint8Array(bytes.buffer, offset, dataLength - 1));
|
|
53
79
|
}
|
|
80
|
+
// TODO should we convert all tag values to typed arrays if possible?
|
|
81
|
+
if (tagId === TiffTag.TileOffsets ||
|
|
82
|
+
tagId === TiffTag.TileByteCounts ||
|
|
83
|
+
tagId === TiffTag.StripOffsets ||
|
|
84
|
+
tagId === TiffTag.StripByteCounts) {
|
|
85
|
+
const typedOutput = readTypedValue(tiff, bytes, offset, dataLength, type);
|
|
86
|
+
if (typedOutput)
|
|
87
|
+
return typedOutput;
|
|
88
|
+
}
|
|
54
89
|
const output = [];
|
|
55
90
|
for (let i = 0; i < dataLength; i += typeSize) {
|
|
56
91
|
output.push(readTagValue(type, bytes, offset + i, tiff.isLittleEndian));
|
|
@@ -94,9 +129,16 @@ export function createTag(tiff, view, offset) {
|
|
|
94
129
|
value: [],
|
|
95
130
|
tagOffset: offset,
|
|
96
131
|
};
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
132
|
+
if (hasBytes(view, dataOffset, dataLength)) {
|
|
133
|
+
const val = readTypedValue(tiff, view, dataOffset - view.sourceOffset, dataLength, dataType);
|
|
134
|
+
if (val) {
|
|
135
|
+
tag.value = val;
|
|
136
|
+
tag.isLoaded = true;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
setBytes(tag, view);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
100
142
|
return tag;
|
|
101
143
|
}
|
|
102
144
|
// If we already have the bytes in the view read them in
|
|
@@ -128,6 +170,7 @@ export async function fetchAllOffsets(tiff, tag) {
|
|
|
128
170
|
tag.view.sourceOffset = tag.dataOffset;
|
|
129
171
|
}
|
|
130
172
|
tag.value = readValue(tiff, tag.id, tag.view, 0, tag.dataType, tag.count);
|
|
173
|
+
tag.view = undefined;
|
|
131
174
|
tag.isLoaded = true;
|
|
132
175
|
return tag.value;
|
|
133
176
|
}
|
|
@@ -161,3 +204,17 @@ export async function getValueAt(tiff, tag, index) {
|
|
|
161
204
|
tag.value[index] = value;
|
|
162
205
|
return value;
|
|
163
206
|
}
|
|
207
|
+
export function getValueAtSync(tiff, tag, index) {
|
|
208
|
+
if (index > tag.count || index < 0)
|
|
209
|
+
throw new Error('TagOffset: out of bounds :' + index);
|
|
210
|
+
if (tag.value[index] != null)
|
|
211
|
+
return tag.value[index];
|
|
212
|
+
if (tag.view == null)
|
|
213
|
+
return null;
|
|
214
|
+
const dataTypeSize = getTiffTagSize(tag.dataType);
|
|
215
|
+
const value = readValue(tiff, undefined, tag.view, index * dataTypeSize, tag.dataType, 1);
|
|
216
|
+
if (typeof value !== 'number')
|
|
217
|
+
throw new Error('Value is not a number');
|
|
218
|
+
tag.value[index] = value;
|
|
219
|
+
return value;
|
|
220
|
+
}
|
package/build/tiff.d.ts
CHANGED
|
@@ -3,6 +3,10 @@ import { TiffGhostOptions } from './read/tiff.gdal.js';
|
|
|
3
3
|
import type { TiffIfdConfig } from './read/tiff.ifd.config.js';
|
|
4
4
|
import type { Source } from './source.js';
|
|
5
5
|
import { TiffImage } from './tiff.image.js';
|
|
6
|
+
export interface TiffCreationOptions {
|
|
7
|
+
/** When initializing the tiff, read data in blocks of this size (in KB) */
|
|
8
|
+
defaultReadSize: number;
|
|
9
|
+
}
|
|
6
10
|
export declare class Tiff {
|
|
7
11
|
/** Read 16KB blocks at a time */
|
|
8
12
|
static DefaultReadSize: number;
|
|
@@ -24,9 +28,9 @@ export declare class Tiff {
|
|
|
24
28
|
isInitialized: boolean;
|
|
25
29
|
private _initPromise?;
|
|
26
30
|
/** A Tiff constructed from a source will not be pre-initialized with {@link init}. */
|
|
27
|
-
constructor(source: Source);
|
|
31
|
+
constructor(source: Source, options?: TiffCreationOptions);
|
|
28
32
|
/** Create a tiff and initialize it by reading the tiff headers */
|
|
29
|
-
static create(source: Source): Promise<Tiff>;
|
|
33
|
+
static create(source: Source, options?: TiffCreationOptions): Promise<Tiff>;
|
|
30
34
|
/**
|
|
31
35
|
* Initialize the tiff loading in the header and all image headers.
|
|
32
36
|
*
|
package/build/tiff.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiff.d.ts","sourceRoot":"","sources":["../src/tiff.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAItD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,qBAAa,IAAI;IACf,iCAAiC;IACjC,MAAM,CAAC,eAAe,SAAa;IACnC,iCAAiC;IACjC,eAAe,SAAwB;IACvC,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,OAAO,cAAoB;IAC3B,0CAA0C;IAC1C,MAAM,EAAE,SAAS,EAAE,CAAM;IACzB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,4CAA4C;IAC5C,SAAS,EAAE,aAAa,CAAiB;IACzC,8CAA8C;IAC9C,cAAc,UAAS;IACvB,6BAA6B;IAC7B,aAAa,UAAS;IAEtB,OAAO,CAAC,YAAY,CAAC,CAAgB;IAErC,sFAAsF;gBAC1E,MAAM,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"tiff.d.ts","sourceRoot":"","sources":["../src/tiff.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAItD,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAG/D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAI5C,MAAM,WAAW,mBAAmB;IAClC,2EAA2E;IAC3E,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,IAAI;IACf,iCAAiC;IACjC,MAAM,CAAC,eAAe,SAAa;IACnC,iCAAiC;IACjC,eAAe,SAAwB;IACvC,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB;IACxB,OAAO,cAAoB;IAC3B,0CAA0C;IAC1C,MAAM,EAAE,SAAS,EAAE,CAAM;IACzB,2BAA2B;IAC3B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,4CAA4C;IAC5C,SAAS,EAAE,aAAa,CAAiB;IACzC,8CAA8C;IAC9C,cAAc,UAAS;IACvB,6BAA6B;IAC7B,aAAa,UAAS;IAEtB,OAAO,CAAC,YAAY,CAAC,CAAgB;IAErC,sFAAsF;gBAC1E,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,mBAA+D;IAKpG,kEAAkE;IAClE,MAAM,CAAC,MAAM,CACX,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,mBAA+D,GACvE,OAAO,CAAC,IAAI,CAAC;IAIhB;;;;;OAKG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMrB;;;;OAIG;IACH,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,SAAS;IAoBnD,qEAAqE;YACvD,UAAU;IAgExB;;;;;OAKG;IACH,OAAO,CAAC,OAAO;CAsBhB"}
|
package/build/tiff.image.d.ts
CHANGED
|
@@ -235,6 +235,9 @@ export declare class TiffImage {
|
|
|
235
235
|
hasTile(x: number, y: number): Promise<boolean>;
|
|
236
236
|
/**
|
|
237
237
|
* Load the offset and byteCount of a tile
|
|
238
|
+
*
|
|
239
|
+
* if the tiff is sparse, offset and byteCount will be zero if the tile is empty
|
|
240
|
+
*
|
|
238
241
|
* @param index index in the tile array
|
|
239
242
|
* @returns Offset and byteCount for the tile
|
|
240
243
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tiff.image.d.ts","sourceRoot":"","sources":["../src/tiff.image.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tiff.image.d.ts","sourceRoot":"","sources":["../src/tiff.image.ts"],"names":[],"mappings":"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"}
|
package/build/tiff.image.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { getCompressionMimeType, TiffCompressionMimeType, TiffMimeType } from './const/tiff.mime.js';
|
|
2
2
|
import { Compression, ModelTypeCode, SubFileType, TiffTag, TiffTagGeo } from './const/tiff.tag.id.js';
|
|
3
|
-
import { fetchAllOffsets, fetchLazy, getValueAt } from './read/tiff.tag.factory.js';
|
|
3
|
+
import { fetchAllOffsets, fetchLazy, getValueAt, getValueAtSync } from './read/tiff.tag.factory.js';
|
|
4
4
|
import { getUint } from './util/bytes.js';
|
|
5
5
|
/** Invalid EPSG code */
|
|
6
6
|
export const InvalidProjectionCode = 32767;
|
|
@@ -494,15 +494,25 @@ export class TiffImage {
|
|
|
494
494
|
}
|
|
495
495
|
/**
|
|
496
496
|
* Load the offset and byteCount of a tile
|
|
497
|
+
*
|
|
498
|
+
* if the tiff is sparse, offset and byteCount will be zero if the tile is empty
|
|
499
|
+
*
|
|
497
500
|
* @param index index in the tile array
|
|
498
501
|
* @returns Offset and byteCount for the tile
|
|
499
502
|
*/
|
|
500
503
|
async getTileSize(index) {
|
|
504
|
+
// If both the tile offset and tile byte counts are loaded,
|
|
505
|
+
// we can get the offset and byte count synchronously without needing to fetch any additional data
|
|
506
|
+
const byteCounts = this.tags.get(TiffTag.TileByteCounts);
|
|
507
|
+
const tileOffset = getOffsetSync(this.tiff, this.tileOffset, index);
|
|
508
|
+
const tileSize = getOffsetSync(this.tiff, byteCounts, index);
|
|
509
|
+
if (tileOffset != null && tileSize != null)
|
|
510
|
+
return { offset: tileOffset, imageSize: tileSize };
|
|
501
511
|
// GDAL optimizes tiles by storing the size of the tile in
|
|
502
512
|
// the few bytes leading up to the tile
|
|
503
513
|
const leaderBytes = this.tiff.options?.tileLeaderByteSize;
|
|
504
514
|
if (leaderBytes) {
|
|
505
|
-
const offset = await getOffset(this.tiff, this.tileOffset, index);
|
|
515
|
+
const offset = tileOffset ?? (await getOffset(this.tiff, this.tileOffset, index));
|
|
506
516
|
// Sparse tiff no data found
|
|
507
517
|
if (offset === 0)
|
|
508
518
|
return { offset: 0, imageSize: 0 };
|
|
@@ -511,17 +521,22 @@ export class TiffImage {
|
|
|
511
521
|
const bytes = await this.tiff.source.fetch(offset - leaderBytes, leaderBytes);
|
|
512
522
|
return { offset, imageSize: getUint(new DataView(bytes), 0, leaderBytes, this.tiff.isLittleEndian) };
|
|
513
523
|
}
|
|
514
|
-
const byteCounts = this.tags.get(TiffTag.TileByteCounts);
|
|
515
524
|
if (byteCounts == null)
|
|
516
525
|
throw new Error('No tile byte counts found');
|
|
517
526
|
const [offset, imageSize] = await Promise.all([
|
|
518
|
-
getOffset(this.tiff, this.tileOffset, index),
|
|
519
|
-
getOffset(this.tiff, byteCounts, index),
|
|
527
|
+
tileOffset ?? getOffset(this.tiff, this.tileOffset, index),
|
|
528
|
+
tileSize ?? getOffset(this.tiff, byteCounts, index),
|
|
520
529
|
]);
|
|
521
530
|
return { offset, imageSize };
|
|
522
531
|
}
|
|
523
532
|
}
|
|
524
533
|
function getOffset(tiff, x, index) {
|
|
534
|
+
const val = getOffsetSync(tiff, x, index);
|
|
535
|
+
if (val != null)
|
|
536
|
+
return Promise.resolve(val);
|
|
537
|
+
return getValueAt(tiff, x, index);
|
|
538
|
+
}
|
|
539
|
+
function getOffsetSync(tiff, x, index) {
|
|
525
540
|
if (index < 0) {
|
|
526
541
|
throw new Error(`Tiff: ${tiff.source.url.href} out of bounds ${TiffTag[x.id]} index:${index} total:${x.count}`);
|
|
527
542
|
}
|
|
@@ -530,5 +545,7 @@ function getOffset(tiff, x, index) {
|
|
|
530
545
|
return 0;
|
|
531
546
|
if (x.type === 'inline')
|
|
532
547
|
return x.value[index];
|
|
533
|
-
|
|
548
|
+
if (x.isLoaded)
|
|
549
|
+
return x.value[index];
|
|
550
|
+
return getValueAtSync(tiff, x, index);
|
|
534
551
|
}
|
package/build/tiff.js
CHANGED
|
@@ -28,12 +28,13 @@ export class Tiff {
|
|
|
28
28
|
isInitialized = false;
|
|
29
29
|
_initPromise;
|
|
30
30
|
/** A Tiff constructed from a source will not be pre-initialized with {@link init}. */
|
|
31
|
-
constructor(source) {
|
|
31
|
+
constructor(source, options = { defaultReadSize: Tiff.DefaultReadSize }) {
|
|
32
32
|
this.source = source;
|
|
33
|
+
this.defaultReadSize = options.defaultReadSize;
|
|
33
34
|
}
|
|
34
35
|
/** Create a tiff and initialize it by reading the tiff headers */
|
|
35
|
-
static create(source) {
|
|
36
|
-
return new Tiff(source).init();
|
|
36
|
+
static create(source, options = { defaultReadSize: Tiff.DefaultReadSize }) {
|
|
37
|
+
return new Tiff(source, options).init();
|
|
37
38
|
}
|
|
38
39
|
/**
|
|
39
40
|
* Initialize the tiff loading in the header and all image headers.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cogeotiff/core",
|
|
3
|
-
"version": "9.
|
|
3
|
+
"version": "9.3.0",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/blacha/cogeotiff.git",
|
|
@@ -23,5 +23,5 @@
|
|
|
23
23
|
"publishConfig": {
|
|
24
24
|
"access": "public"
|
|
25
25
|
},
|
|
26
|
-
"gitHead": "
|
|
26
|
+
"gitHead": "82b82e9d9f8996dfb0cb48827c143e134acc9865"
|
|
27
27
|
}
|
|
@@ -4,6 +4,7 @@ import { TiffTag } from '../index.js';
|
|
|
4
4
|
import { Tiff } from '../tiff.js';
|
|
5
5
|
import { SourceMemory } from './source.memory.js';
|
|
6
6
|
|
|
7
|
+
Tiff.DefaultReadSize = 64 * 1024;
|
|
7
8
|
// console.log = console.trace;
|
|
8
9
|
/** Read a tile from every image inside of a tiff 300 tiles read */
|
|
9
10
|
async function main(): Promise<void> {
|
|
@@ -18,9 +19,10 @@ async function main(): Promise<void> {
|
|
|
18
19
|
// 6 images
|
|
19
20
|
for (const img of tiff.images) await img.getTile(0, 0);
|
|
20
21
|
|
|
22
|
+
const img = tiff.images[0];
|
|
21
23
|
// Force loading all the byte arrays in which benchmarks the bulk array loading
|
|
22
|
-
await
|
|
23
|
-
await
|
|
24
|
+
await img.fetch(TiffTag.TileByteCounts);
|
|
25
|
+
await img.fetch(TiffTag.TileOffsets);
|
|
24
26
|
}
|
|
25
27
|
}
|
|
26
28
|
|
|
@@ -9,6 +9,7 @@ const gunzipP = promisify(gunzip);
|
|
|
9
9
|
export class TestFileSource implements Source {
|
|
10
10
|
url: URL;
|
|
11
11
|
data: Promise<Buffer>;
|
|
12
|
+
fetches: { offset: number; length: number }[] = [];
|
|
12
13
|
|
|
13
14
|
constructor(fileName: URL) {
|
|
14
15
|
this.url = fileName;
|
|
@@ -20,6 +21,7 @@ export class TestFileSource implements Source {
|
|
|
20
21
|
|
|
21
22
|
async fetch(offset: number, length: number): Promise<ArrayBuffer> {
|
|
22
23
|
const fileData = await this.data;
|
|
24
|
+
this.fetches.push({ offset, length });
|
|
23
25
|
return fileData.buffer.slice(fileData.byteOffset + offset, fileData.byteOffset + offset + length) as ArrayBuffer;
|
|
24
26
|
}
|
|
25
27
|
|
|
@@ -7,7 +7,7 @@ import { SourceMemory } from '../__benchmark__/source.memory.js';
|
|
|
7
7
|
import { TiffMimeType } from '../const/tiff.mime.js';
|
|
8
8
|
import { Photometric, SampleFormat } from '../const/tiff.tag.id.js';
|
|
9
9
|
import { TiffVersion } from '../const/tiff.version.js';
|
|
10
|
-
import { TiffTag, TiffTagGeo } from '../index.js';
|
|
10
|
+
import { TagOffset, TiffTag, TiffTagGeo } from '../index.js';
|
|
11
11
|
import { Tiff } from '../tiff.js';
|
|
12
12
|
|
|
13
13
|
function validate(tif: Tiff): void {
|
|
@@ -30,6 +30,8 @@ describe('CogRead', () => {
|
|
|
30
30
|
assert.equal(tiff.version, TiffVersion.Tiff);
|
|
31
31
|
assert.equal(tiff.images.length, 1);
|
|
32
32
|
const firstImage = tiff.images[0];
|
|
33
|
+
const byteCounts = await firstImage.fetch(TiffTag.TileByteCounts);
|
|
34
|
+
assert.deepEqual([...(byteCounts ?? [])], [511]);
|
|
33
35
|
|
|
34
36
|
assert.equal(firstImage.compression, 'application/zstd');
|
|
35
37
|
assert.equal(firstImage.isTiled(), true);
|
|
@@ -48,6 +50,14 @@ describe('CogRead', () => {
|
|
|
48
50
|
assert.equal(tiff.version, TiffVersion.BigTiff);
|
|
49
51
|
assert.equal(tiff.images[0].epsg, null);
|
|
50
52
|
validate(tiff);
|
|
53
|
+
|
|
54
|
+
const [byteCounts, tileOffsets] = await Promise.all([
|
|
55
|
+
tiff.images[0].fetch(TiffTag.TileByteCounts),
|
|
56
|
+
tiff.images[0].fetch(TiffTag.TileOffsets),
|
|
57
|
+
]);
|
|
58
|
+
|
|
59
|
+
assert.deepEqual([...(byteCounts ?? [])], [196608]);
|
|
60
|
+
assert.deepEqual([...(tileOffsets ?? [])], [272]);
|
|
51
61
|
});
|
|
52
62
|
|
|
53
63
|
it('should fail reading a empty byte tiff', async () => {
|
|
@@ -87,6 +97,88 @@ describe('CogRead', () => {
|
|
|
87
97
|
assert.equal(tiff.images.length, 5);
|
|
88
98
|
});
|
|
89
99
|
|
|
100
|
+
it('should read the byte count array if it is loaded', async () => {
|
|
101
|
+
const source = new TestFileSource(new URL('../../data/rgba8_cog.tiff', import.meta.url));
|
|
102
|
+
const fetchSize = 16 * 1024;
|
|
103
|
+
|
|
104
|
+
const tiff = new Tiff(source);
|
|
105
|
+
tiff.defaultReadSize = fetchSize;
|
|
106
|
+
await tiff.init();
|
|
107
|
+
|
|
108
|
+
assert.equal(source.fetches.length, 1);
|
|
109
|
+
assert.equal(source.fetches[0].length, fetchSize);
|
|
110
|
+
|
|
111
|
+
const img = tiff.images[0];
|
|
112
|
+
const byteCounts = img.tags.get(TiffTag.TileByteCounts) as TagOffset;
|
|
113
|
+
const tileOffsets = img.tags.get(TiffTag.TileOffsets) as TagOffset;
|
|
114
|
+
assert.equal(source.fetches.length, 1);
|
|
115
|
+
|
|
116
|
+
assert.equal(byteCounts.type, 'offset');
|
|
117
|
+
assert.equal(byteCounts.isLoaded, true);
|
|
118
|
+
|
|
119
|
+
assert.equal(tileOffsets.type, 'offset');
|
|
120
|
+
assert.equal(tileOffsets.isLoaded, true);
|
|
121
|
+
|
|
122
|
+
const tile = await img.getTile(0, 0);
|
|
123
|
+
assert.equal(tile?.bytes.byteLength, byteCounts.value[0]);
|
|
124
|
+
assert.equal(source.fetches.length, 2);
|
|
125
|
+
assert.deepEqual(source.fetches[1], { offset: tileOffsets.value[0], length: byteCounts.value[0] });
|
|
126
|
+
|
|
127
|
+
// force the offset to be unloaded
|
|
128
|
+
byteCounts.isLoaded = false;
|
|
129
|
+
const oldValue = byteCounts.value;
|
|
130
|
+
byteCounts.value = [];
|
|
131
|
+
const tileB = await img.getTile(0, 0);
|
|
132
|
+
assert.equal(tileB?.bytes.byteLength, oldValue[0]);
|
|
133
|
+
assert.equal(source.fetches.length, 4);
|
|
134
|
+
|
|
135
|
+
// Read the tile offset then the tile
|
|
136
|
+
assert.deepEqual(source.fetches[2], { offset: tileOffsets.value[0] - 4, length: 4 });
|
|
137
|
+
assert.deepEqual(source.fetches[3], { offset: tileOffsets.value[0], length: oldValue[0] });
|
|
138
|
+
});
|
|
139
|
+
|
|
140
|
+
it('should read the byte count array if it is loaded (BigTiff)', async () => {
|
|
141
|
+
const source = new TestFileSource(new URL('../../data/rgba8_cog_big.tiff', import.meta.url));
|
|
142
|
+
const fetchSize = 16 * 1024;
|
|
143
|
+
|
|
144
|
+
const tiff = new Tiff(source);
|
|
145
|
+
tiff.defaultReadSize = fetchSize;
|
|
146
|
+
await tiff.init();
|
|
147
|
+
|
|
148
|
+
assert.equal(source.fetches.length, 1);
|
|
149
|
+
assert.equal(source.fetches[0].length, fetchSize);
|
|
150
|
+
|
|
151
|
+
const img = tiff.images[0];
|
|
152
|
+
const byteCounts = img.tags.get(TiffTag.TileByteCounts) as TagOffset;
|
|
153
|
+
const tileOffsets = img.tags.get(TiffTag.TileOffsets) as TagOffset;
|
|
154
|
+
assert.equal(source.fetches.length, 1);
|
|
155
|
+
|
|
156
|
+
assert.equal(byteCounts.type, 'offset');
|
|
157
|
+
assert.equal(byteCounts.isLoaded, true);
|
|
158
|
+
assert.equal(byteCounts.view == null, true);
|
|
159
|
+
|
|
160
|
+
assert.equal(tileOffsets.type, 'offset');
|
|
161
|
+
assert.equal(tileOffsets.isLoaded, false);
|
|
162
|
+
assert.equal(tileOffsets.view == null, false);
|
|
163
|
+
|
|
164
|
+
const tile = await img.getTile(0, 0);
|
|
165
|
+
assert.equal(tile?.bytes.byteLength, byteCounts.value[0]);
|
|
166
|
+
assert.equal(source.fetches.length, 2);
|
|
167
|
+
assert.deepEqual(source.fetches[1], { offset: tileOffsets.value[0], length: byteCounts.value[0] });
|
|
168
|
+
|
|
169
|
+
// force the offset to be unloaded
|
|
170
|
+
byteCounts.isLoaded = false;
|
|
171
|
+
const oldValue = byteCounts.value;
|
|
172
|
+
byteCounts.value = [];
|
|
173
|
+
byteCounts.view = undefined;
|
|
174
|
+
const tileB = await img.getTile(0, 0);
|
|
175
|
+
assert.equal(tileB?.bytes.byteLength, oldValue[0]);
|
|
176
|
+
assert.equal(source.fetches.length, 4);
|
|
177
|
+
// Read the tile offset then the tile
|
|
178
|
+
assert.deepEqual(source.fetches[2], { offset: tileOffsets.value[0] - 4, length: 4 });
|
|
179
|
+
assert.deepEqual(source.fetches[3], { offset: tileOffsets.value[0], length: oldValue[0] });
|
|
180
|
+
});
|
|
181
|
+
|
|
90
182
|
it('should read ifds from anywhere in the file', async () => {
|
|
91
183
|
const source = new TestFileSource(new URL('../../data/DEM_BS28_2016_1000_1141.tif', import.meta.url));
|
|
92
184
|
const tiff = await Tiff.create(source);
|
|
@@ -109,7 +201,9 @@ describe('CogRead', () => {
|
|
|
109
201
|
|
|
110
202
|
assert.equal(im.valueGeo(TiffTagGeo.GTCitationGeoKey), 'NZGD2000 / New Zealand Transverse Mercator 2000');
|
|
111
203
|
assert.equal(im.valueGeo(TiffTagGeo.GeodeticCitationGeoKey), 'NZGD2000');
|
|
112
|
-
|
|
204
|
+
|
|
205
|
+
const stripCount = await im.fetch(TiffTag.StripByteCounts);
|
|
206
|
+
assert.deepEqual([...(stripCount ?? [])], [8064, 8064, 8064, 8064, 8064, 8064, 8064, 5040]);
|
|
113
207
|
});
|
|
114
208
|
|
|
115
209
|
it('should read sub array ifds', async () => {
|
|
@@ -167,5 +261,16 @@ describe('CogRead', () => {
|
|
|
167
261
|
const tiff = await Tiff.create(source);
|
|
168
262
|
assert.equal(tiff.images.length, 5);
|
|
169
263
|
assert.equal(tiff.images[0].epsg, 3857);
|
|
264
|
+
|
|
265
|
+
const [byteCounts, tileOffsets] = await Promise.all([
|
|
266
|
+
tiff.images[0].fetch(TiffTag.TileByteCounts),
|
|
267
|
+
tiff.images[0].fetch(TiffTag.TileOffsets),
|
|
268
|
+
]);
|
|
269
|
+
|
|
270
|
+
assert.deepEqual([...(byteCounts ?? [])], [64, 64, 68, 64, 64, 68, 64, 64, 68, 64, 64, 64, 64, 64, 64, 68]);
|
|
271
|
+
assert.deepEqual(
|
|
272
|
+
[...(tileOffsets ?? [])],
|
|
273
|
+
[797, 861, 925, 993, 1057, 1121, 1189, 1253, 1317, 1385, 1449, 1513, 1577, 1641, 1705, 1769],
|
|
274
|
+
);
|
|
170
275
|
});
|
|
171
276
|
});
|
package/src/const/tiff.tag.id.ts
CHANGED
|
@@ -86,6 +86,14 @@ export enum PlanarConfiguration {
|
|
|
86
86
|
Separate = 2,
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
+
export enum Predictor {
|
|
90
|
+
None = 1,
|
|
91
|
+
/** Horizontal differencing */
|
|
92
|
+
Horizontal = 2,
|
|
93
|
+
/** Floating point */
|
|
94
|
+
FloatingPoint = 3,
|
|
95
|
+
}
|
|
96
|
+
|
|
89
97
|
export enum SampleFormat {
|
|
90
98
|
/** Unsigned integer data */
|
|
91
99
|
Uint = 1,
|
|
@@ -417,12 +425,12 @@ export interface TiffTagType {
|
|
|
417
425
|
|
|
418
426
|
[TiffTag.TileWidth]: number;
|
|
419
427
|
[TiffTag.TileHeight]: number;
|
|
420
|
-
[TiffTag.TileOffsets]: number[];
|
|
421
|
-
[TiffTag.TileByteCounts]: number[];
|
|
428
|
+
[TiffTag.TileOffsets]: number[] | Uint32Array | Uint16Array;
|
|
429
|
+
[TiffTag.TileByteCounts]: number[] | Uint32Array | Uint16Array;
|
|
422
430
|
[TiffTag.JpegTables]: number[];
|
|
423
431
|
|
|
424
|
-
[TiffTag.StripByteCounts]: number[];
|
|
425
|
-
[TiffTag.StripOffsets]: number[];
|
|
432
|
+
[TiffTag.StripByteCounts]: number[] | Uint32Array | Uint16Array;
|
|
433
|
+
[TiffTag.StripOffsets]: number[] | Uint32Array | Uint16Array;
|
|
426
434
|
|
|
427
435
|
[TiffTag.SamplesPerPixel]: number;
|
|
428
436
|
[TiffTag.SampleFormat]: SampleFormat[];
|
|
@@ -437,6 +445,7 @@ export interface TiffTagType {
|
|
|
437
445
|
|
|
438
446
|
[TiffTag.PlanarConfiguration]: PlanarConfiguration;
|
|
439
447
|
[TiffTag.Orientation]: Orientation;
|
|
448
|
+
[TiffTag.Predictor]: Predictor;
|
|
440
449
|
|
|
441
450
|
[TiffTag.LercParameters]: number[];
|
|
442
451
|
|
|
@@ -478,7 +487,6 @@ export interface TiffTagType {
|
|
|
478
487
|
[TiffTag.Indexed]: unknown;
|
|
479
488
|
[TiffTag.PageName]: unknown;
|
|
480
489
|
[TiffTag.PageNumber]: unknown;
|
|
481
|
-
[TiffTag.Predictor]: unknown;
|
|
482
490
|
[TiffTag.PrimaryChromaticities]: unknown;
|
|
483
491
|
[TiffTag.ReferenceBlackWhite]: unknown;
|
|
484
492
|
[TiffTag.SMinSampleValue]: unknown;
|
package/src/index.ts
CHANGED
|
@@ -11,6 +11,7 @@ export {
|
|
|
11
11
|
Orientation,
|
|
12
12
|
Photometric,
|
|
13
13
|
PlanarConfiguration,
|
|
14
|
+
Predictor,
|
|
14
15
|
RasterTypeKey,
|
|
15
16
|
SampleFormat,
|
|
16
17
|
SubFileType,
|
|
@@ -22,7 +23,9 @@ export { TiffVersion } from './const/tiff.version.js';
|
|
|
22
23
|
export type { Tag, TagInline, TagLazy, TagOffset } from './read/tiff.tag.js';
|
|
23
24
|
export { getTiffTagSize } from './read/tiff.value.reader.js';
|
|
24
25
|
export type { Source } from './source.js';
|
|
26
|
+
export type { TiffImageTileCount } from './tiff.image.js';
|
|
25
27
|
export { TiffImage } from './tiff.image.js';
|
|
28
|
+
export type { TiffCreationOptions } from './tiff.js';
|
|
26
29
|
export { Tiff } from './tiff.js';
|
|
27
30
|
export { toHex } from './util/util.hex.js';
|
|
28
31
|
export type { BoundingBox, Point, Size, Vector } from './vector.js';
|
|
@@ -5,6 +5,7 @@ import type { Tiff } from '../tiff.js';
|
|
|
5
5
|
import { getUint, getUint64 } from '../util/bytes.js';
|
|
6
6
|
import type { DataViewOffset } from './data.view.offset.js';
|
|
7
7
|
import { hasBytes } from './data.view.offset.js';
|
|
8
|
+
import { isLittleEndian } from './endian.js';
|
|
8
9
|
import type { Tag, TagLazy, TagOffset } from './tiff.tag.js';
|
|
9
10
|
import { getTiffTagSize } from './tiff.value.reader.js';
|
|
10
11
|
|
|
@@ -57,6 +58,42 @@ function readTagValue(
|
|
|
57
58
|
}
|
|
58
59
|
}
|
|
59
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Convert a tiff tag value to a typed array if the local endian matches the tiff endian
|
|
63
|
+
*
|
|
64
|
+
* @param tiff
|
|
65
|
+
* @param bytes
|
|
66
|
+
* @param offset Offset in the data view to read from
|
|
67
|
+
* @param length Number of bytes to read
|
|
68
|
+
* @param type type of tiff tag
|
|
69
|
+
* @returns the value if the type is a typed array and the endianness matches otherwise null
|
|
70
|
+
*/
|
|
71
|
+
export function readTypedValue<T>(
|
|
72
|
+
tiff: Tiff,
|
|
73
|
+
bytes: DataView,
|
|
74
|
+
offset: number,
|
|
75
|
+
length: number,
|
|
76
|
+
type: TiffTagValueType,
|
|
77
|
+
): T | null {
|
|
78
|
+
switch (type) {
|
|
79
|
+
case TiffTagValueType.Uint8:
|
|
80
|
+
return new Uint8Array(
|
|
81
|
+
bytes.buffer.slice(bytes.byteOffset + offset, bytes.byteOffset + offset + length),
|
|
82
|
+
) as unknown as T;
|
|
83
|
+
case TiffTagValueType.Uint16:
|
|
84
|
+
if (tiff.isLittleEndian !== isLittleEndian) return null;
|
|
85
|
+
return new Uint16Array(
|
|
86
|
+
bytes.buffer.slice(bytes.byteOffset + offset, bytes.byteOffset + offset + length),
|
|
87
|
+
) as unknown as T;
|
|
88
|
+
case TiffTagValueType.Uint32:
|
|
89
|
+
if (tiff.isLittleEndian !== isLittleEndian) return null;
|
|
90
|
+
return new Uint32Array(
|
|
91
|
+
bytes.buffer.slice(bytes.byteOffset + offset, bytes.byteOffset + offset + length),
|
|
92
|
+
) as unknown as T;
|
|
93
|
+
}
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
|
|
60
97
|
function readValue<T>(
|
|
61
98
|
tiff: Tiff,
|
|
62
99
|
tagId: TiffTag | undefined,
|
|
@@ -84,6 +121,17 @@ function readValue<T>(
|
|
|
84
121
|
) as unknown as T;
|
|
85
122
|
}
|
|
86
123
|
|
|
124
|
+
// TODO should we convert all tag values to typed arrays if possible?
|
|
125
|
+
if (
|
|
126
|
+
tagId === TiffTag.TileOffsets ||
|
|
127
|
+
tagId === TiffTag.TileByteCounts ||
|
|
128
|
+
tagId === TiffTag.StripOffsets ||
|
|
129
|
+
tagId === TiffTag.StripByteCounts
|
|
130
|
+
) {
|
|
131
|
+
const typedOutput = readTypedValue(tiff, bytes, offset, dataLength, type);
|
|
132
|
+
if (typedOutput) return typedOutput as unknown as T;
|
|
133
|
+
}
|
|
134
|
+
|
|
87
135
|
const output = [];
|
|
88
136
|
for (let i = 0; i < dataLength; i += typeSize) {
|
|
89
137
|
output.push(readTagValue(type, bytes, offset + i, tiff.isLittleEndian));
|
|
@@ -133,8 +181,17 @@ export function createTag(tiff: Tiff, view: DataViewOffset, offset: number): Tag
|
|
|
133
181
|
value: [],
|
|
134
182
|
tagOffset: offset,
|
|
135
183
|
};
|
|
136
|
-
|
|
137
|
-
if (
|
|
184
|
+
|
|
185
|
+
if (hasBytes(view, dataOffset, dataLength)) {
|
|
186
|
+
const val = readTypedValue(tiff, view, dataOffset - view.sourceOffset, dataLength, dataType);
|
|
187
|
+
if (val) {
|
|
188
|
+
tag.value = val as number[] | Uint32Array | Uint16Array;
|
|
189
|
+
tag.isLoaded = true;
|
|
190
|
+
} else {
|
|
191
|
+
setBytes(tag, view);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
138
195
|
return tag;
|
|
139
196
|
}
|
|
140
197
|
|
|
@@ -161,7 +218,7 @@ export async function fetchLazy<T>(tag: TagLazy<T>, tiff: Tiff): Promise<T> {
|
|
|
161
218
|
/**
|
|
162
219
|
* Fetch all the values from a {@link TagOffset}
|
|
163
220
|
*/
|
|
164
|
-
export async function fetchAllOffsets(tiff: Tiff, tag: TagOffset): Promise<
|
|
221
|
+
export async function fetchAllOffsets(tiff: Tiff, tag: TagOffset): Promise<TagOffset['value']> {
|
|
165
222
|
const dataTypeSize = getTiffTagSize(tag.dataType);
|
|
166
223
|
|
|
167
224
|
if (tag.view == null) {
|
|
@@ -171,6 +228,7 @@ export async function fetchAllOffsets(tiff: Tiff, tag: TagOffset): Promise<numbe
|
|
|
171
228
|
}
|
|
172
229
|
|
|
173
230
|
tag.value = readValue(tiff, tag.id, tag.view, 0, tag.dataType, tag.count);
|
|
231
|
+
tag.view = undefined;
|
|
174
232
|
tag.isLoaded = true;
|
|
175
233
|
return tag.value;
|
|
176
234
|
}
|
|
@@ -204,3 +262,15 @@ export async function getValueAt(tiff: Tiff, tag: TagOffset, index: number): Pro
|
|
|
204
262
|
tag.value[index] = value;
|
|
205
263
|
return value;
|
|
206
264
|
}
|
|
265
|
+
|
|
266
|
+
export function getValueAtSync(tiff: Tiff, tag: TagOffset, index: number): number | null {
|
|
267
|
+
if (index > tag.count || index < 0) throw new Error('TagOffset: out of bounds :' + index);
|
|
268
|
+
if (tag.value[index] != null) return tag.value[index];
|
|
269
|
+
if (tag.view == null) return null;
|
|
270
|
+
const dataTypeSize = getTiffTagSize(tag.dataType);
|
|
271
|
+
|
|
272
|
+
const value = readValue(tiff, undefined, tag.view, index * dataTypeSize, tag.dataType, 1);
|
|
273
|
+
if (typeof value !== 'number') throw new Error('Value is not a number');
|
|
274
|
+
tag.value[index] = value;
|
|
275
|
+
return value;
|
|
276
|
+
}
|
package/src/read/tiff.tag.ts
CHANGED
|
@@ -38,7 +38,7 @@ export interface TagInline<T> extends TagBase {
|
|
|
38
38
|
export interface TagOffset extends TagBase {
|
|
39
39
|
type: 'offset';
|
|
40
40
|
/** Values of the offsets this is a sparse array unless @see {TagOffset.isLoaded} is true */
|
|
41
|
-
value: number[];
|
|
41
|
+
value: number[] | Uint32Array | Uint16Array;
|
|
42
42
|
/** Have all the values been read */
|
|
43
43
|
isLoaded: boolean;
|
|
44
44
|
/** Raw buffer of the values for lazy decoding, as reading 100,000s of uint64s can take quite a long time */
|
package/src/tiff.image.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { getCompressionMimeType, TiffCompressionMimeType, TiffMimeType } from './const/tiff.mime.js';
|
|
2
2
|
import type { TiffTagGeoType, TiffTagType } from './const/tiff.tag.id.js';
|
|
3
3
|
import { Compression, ModelTypeCode, SubFileType, TiffTag, TiffTagGeo } from './const/tiff.tag.id.js';
|
|
4
|
-
import { fetchAllOffsets, fetchLazy, getValueAt } from './read/tiff.tag.factory.js';
|
|
4
|
+
import { fetchAllOffsets, fetchLazy, getValueAt, getValueAtSync } from './read/tiff.tag.factory.js';
|
|
5
5
|
import type { Tag, TagInline, TagOffset } from './read/tiff.tag.js';
|
|
6
6
|
import type { Tiff } from './tiff.js';
|
|
7
7
|
import { getUint } from './util/bytes.js';
|
|
@@ -556,15 +556,25 @@ export class TiffImage {
|
|
|
556
556
|
|
|
557
557
|
/**
|
|
558
558
|
* Load the offset and byteCount of a tile
|
|
559
|
+
*
|
|
560
|
+
* if the tiff is sparse, offset and byteCount will be zero if the tile is empty
|
|
561
|
+
*
|
|
559
562
|
* @param index index in the tile array
|
|
560
563
|
* @returns Offset and byteCount for the tile
|
|
561
564
|
*/
|
|
562
565
|
async getTileSize(index: number): Promise<{ offset: number; imageSize: number }> {
|
|
566
|
+
// If both the tile offset and tile byte counts are loaded,
|
|
567
|
+
// we can get the offset and byte count synchronously without needing to fetch any additional data
|
|
568
|
+
const byteCounts = this.tags.get(TiffTag.TileByteCounts) as TagOffset | TagInline<number[]>;
|
|
569
|
+
const tileOffset = getOffsetSync(this.tiff, this.tileOffset, index);
|
|
570
|
+
const tileSize = getOffsetSync(this.tiff, byteCounts, index);
|
|
571
|
+
if (tileOffset != null && tileSize != null) return { offset: tileOffset, imageSize: tileSize };
|
|
572
|
+
|
|
563
573
|
// GDAL optimizes tiles by storing the size of the tile in
|
|
564
574
|
// the few bytes leading up to the tile
|
|
565
575
|
const leaderBytes = this.tiff.options?.tileLeaderByteSize;
|
|
566
576
|
if (leaderBytes) {
|
|
567
|
-
const offset = await getOffset(this.tiff, this.tileOffset, index);
|
|
577
|
+
const offset = tileOffset ?? (await getOffset(this.tiff, this.tileOffset, index));
|
|
568
578
|
// Sparse tiff no data found
|
|
569
579
|
if (offset === 0) return { offset: 0, imageSize: 0 };
|
|
570
580
|
|
|
@@ -574,22 +584,29 @@ export class TiffImage {
|
|
|
574
584
|
return { offset, imageSize: getUint(new DataView(bytes), 0, leaderBytes, this.tiff.isLittleEndian) };
|
|
575
585
|
}
|
|
576
586
|
|
|
577
|
-
const byteCounts = this.tags.get(TiffTag.TileByteCounts) as TagOffset;
|
|
578
587
|
if (byteCounts == null) throw new Error('No tile byte counts found');
|
|
579
588
|
const [offset, imageSize] = await Promise.all([
|
|
580
|
-
getOffset(this.tiff, this.tileOffset, index),
|
|
581
|
-
getOffset(this.tiff, byteCounts, index),
|
|
589
|
+
tileOffset ?? getOffset(this.tiff, this.tileOffset, index),
|
|
590
|
+
tileSize ?? getOffset(this.tiff, byteCounts, index),
|
|
582
591
|
]);
|
|
583
592
|
return { offset, imageSize };
|
|
584
593
|
}
|
|
585
594
|
}
|
|
586
595
|
|
|
587
596
|
function getOffset(tiff: Tiff, x: TagOffset | TagInline<number[]>, index: number): number | Promise<number> {
|
|
597
|
+
const val = getOffsetSync(tiff, x, index);
|
|
598
|
+
if (val != null) return Promise.resolve(val);
|
|
599
|
+
return getValueAt(tiff, x as TagOffset, index);
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
function getOffsetSync(tiff: Tiff, x: TagOffset | TagInline<number[]>, index: number): number | null {
|
|
588
603
|
if (index < 0) {
|
|
589
604
|
throw new Error(`Tiff: ${tiff.source.url.href} out of bounds ${TiffTag[x.id]} index:${index} total:${x.count}`);
|
|
590
605
|
}
|
|
591
606
|
// Sparse tiffs may not have the full tileWidth * tileHeight in their offset arrays
|
|
592
607
|
if (index >= x.count) return 0;
|
|
593
608
|
if (x.type === 'inline') return x.value[index];
|
|
594
|
-
|
|
609
|
+
if (x.isLoaded) return x.value[index];
|
|
610
|
+
|
|
611
|
+
return getValueAtSync(tiff, x, index);
|
|
595
612
|
}
|
package/src/tiff.ts
CHANGED
|
@@ -13,6 +13,11 @@ import { TiffImage } from './tiff.image.js';
|
|
|
13
13
|
import { getUint } from './util/bytes.js';
|
|
14
14
|
import { toHex } from './util/util.hex.js';
|
|
15
15
|
|
|
16
|
+
export interface TiffCreationOptions {
|
|
17
|
+
/** When initializing the tiff, read data in blocks of this size (in KB) */
|
|
18
|
+
defaultReadSize: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
16
21
|
export class Tiff {
|
|
17
22
|
/** Read 16KB blocks at a time */
|
|
18
23
|
static DefaultReadSize = 16 * 1024;
|
|
@@ -36,13 +41,17 @@ export class Tiff {
|
|
|
36
41
|
private _initPromise?: Promise<Tiff>;
|
|
37
42
|
|
|
38
43
|
/** A Tiff constructed from a source will not be pre-initialized with {@link init}. */
|
|
39
|
-
constructor(source: Source) {
|
|
44
|
+
constructor(source: Source, options: TiffCreationOptions = { defaultReadSize: Tiff.DefaultReadSize }) {
|
|
40
45
|
this.source = source;
|
|
46
|
+
this.defaultReadSize = options.defaultReadSize;
|
|
41
47
|
}
|
|
42
48
|
|
|
43
49
|
/** Create a tiff and initialize it by reading the tiff headers */
|
|
44
|
-
static create(
|
|
45
|
-
|
|
50
|
+
static create(
|
|
51
|
+
source: Source,
|
|
52
|
+
options: TiffCreationOptions = { defaultReadSize: Tiff.DefaultReadSize },
|
|
53
|
+
): Promise<Tiff> {
|
|
54
|
+
return new Tiff(source, options).init();
|
|
46
55
|
}
|
|
47
56
|
|
|
48
57
|
/**
|