@cogeotiff/core 7.2.1 → 8.0.2
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 +5 -502
- package/README.md +23 -11
- package/build/__benchmark__/cog.read.benchmark.d.ts +0 -1
- package/build/__benchmark__/cog.read.benchmark.js +6 -4
- package/build/__benchmark__/cog.read.benchmark.js.map +1 -0
- package/build/__benchmark__/source.file.d.ts +9 -0
- package/build/__benchmark__/source.file.js +29 -0
- package/build/__benchmark__/source.file.js.map +1 -0
- package/build/__benchmark__/source.memory.d.ts +9 -0
- package/build/__benchmark__/source.memory.js +32 -0
- package/build/__benchmark__/source.memory.js.map +1 -0
- package/build/__test__/cog.image.test.d.ts +1 -2
- package/build/__test__/cog.image.test.js +82 -90
- package/build/__test__/cog.image.test.js.map +1 -0
- package/build/__test__/cog.read.test.d.ts +1 -2
- package/build/__test__/cog.read.test.js +37 -55
- package/build/__test__/cog.read.test.js.map +1 -0
- package/build/__test__/example.d.ts +1 -0
- package/build/__test__/example.js +27 -0
- package/build/__test__/example.js.map +1 -0
- package/build/cog.tiff.d.ts +22 -28
- package/build/cog.tiff.image.d.ts +11 -23
- package/build/cog.tiff.image.js +108 -62
- package/build/cog.tiff.image.js.map +1 -0
- package/build/cog.tiff.js +141 -97
- package/build/cog.tiff.js.map +1 -0
- package/build/const/index.d.ts +1 -2
- package/build/const/index.js +2 -2
- package/build/const/index.js.map +1 -0
- package/build/const/tiff.endian.d.ts +0 -1
- package/build/const/tiff.endian.js +1 -1
- package/build/const/tiff.endian.js.map +1 -0
- package/build/const/tiff.mime.d.ts +10 -11
- package/build/const/tiff.mime.js +22 -22
- package/build/const/tiff.mime.js.map +1 -0
- package/build/const/tiff.tag.id.d.ts +3 -3
- package/build/const/tiff.tag.id.js +4 -3
- package/build/const/tiff.tag.id.js.map +1 -0
- package/build/const/tiff.tag.value.d.ts +15 -16
- package/build/const/tiff.tag.value.js +16 -16
- package/build/const/tiff.tag.value.js.map +1 -0
- package/build/const/tiff.version.d.ts +0 -1
- package/build/const/tiff.version.js +1 -1
- package/build/const/tiff.version.js.map +1 -0
- package/build/index.d.ts +11 -6
- package/build/index.js +9 -5
- package/build/index.js.map +1 -0
- package/build/read/data.view.offset.d.ts +15 -0
- package/build/read/data.view.offset.js +19 -0
- package/build/read/data.view.offset.js.map +1 -0
- package/build/read/tiff.gdal.d.ts +9 -12
- package/build/read/tiff.gdal.js +22 -17
- package/build/read/tiff.gdal.js.map +1 -0
- package/build/read/tiff.ifd.config.d.ts +6 -4
- package/build/read/tiff.ifd.config.js +2 -2
- package/build/read/tiff.ifd.config.js.map +1 -0
- package/build/read/tiff.tag.d.ts +40 -20
- package/build/read/tiff.tag.factory.d.ts +16 -0
- package/build/read/tiff.tag.factory.js +130 -0
- package/build/read/tiff.tag.factory.js.map +1 -0
- package/build/read/tiff.tag.js +2 -37
- package/build/read/tiff.tag.js.map +1 -0
- package/build/read/tiff.value.reader.d.ts +2 -6
- package/build/read/tiff.value.reader.js +16 -54
- package/build/read/tiff.value.reader.js.map +1 -0
- package/build/source.d.ts +5 -0
- package/build/source.js +2 -0
- package/build/source.js.map +1 -0
- package/build/util/bytes.d.ts +17 -0
- package/build/util/bytes.js +42 -0
- package/build/util/bytes.js.map +1 -0
- package/build/util/util.hex.d.ts +2 -3
- package/build/util/util.hex.js +4 -5
- package/build/util/util.hex.js.map +1 -0
- package/build/vector.d.ts +0 -1
- package/build/vector.js +1 -1
- package/build/vector.js.map +1 -0
- package/package.json +25 -30
- package/src/__benchmark__/cog.read.benchmark.ts +12 -10
- package/src/__benchmark__/source.file.ts +23 -0
- package/src/__benchmark__/source.memory.ts +23 -0
- package/src/__test__/cog.image.test.ts +188 -197
- package/src/__test__/cog.read.test.ts +50 -72
- package/src/__test__/example.ts +31 -0
- package/src/cog.tiff.image.ts +456 -447
- package/src/cog.tiff.ts +142 -145
- package/src/const/index.ts +1 -1
- package/src/const/tiff.endian.ts +2 -2
- package/src/const/tiff.mime.ts +21 -21
- package/src/const/tiff.tag.id.ts +157 -156
- package/src/const/tiff.tag.value.ts +16 -16
- package/src/const/tiff.version.ts +11 -11
- package/src/index.ts +11 -5
- package/src/read/data.view.offset.ts +23 -0
- package/src/read/tiff.gdal.ts +61 -63
- package/src/read/tiff.ifd.config.ts +35 -31
- package/src/read/tiff.tag.factory.ts +163 -0
- package/src/read/tiff.tag.ts +40 -38
- package/src/read/tiff.value.reader.ts +25 -73
- package/src/source.ts +5 -0
- package/src/util/bytes.ts +44 -0
- package/src/util/util.hex.ts +5 -7
- package/src/vector.ts +5 -5
- package/tsconfig.json +8 -8
- package/build/__benchmark__/cog.read.benchmark.d.ts.map +0 -1
- package/build/__test__/cog.image.test.d.ts.map +0 -1
- package/build/__test__/cog.read.test.d.ts.map +0 -1
- package/build/cog.tiff.d.ts.map +0 -1
- package/build/cog.tiff.image.d.ts.map +0 -1
- package/build/const/index.d.ts.map +0 -1
- package/build/const/tiff.endian.d.ts.map +0 -1
- package/build/const/tiff.mime.d.ts.map +0 -1
- package/build/const/tiff.tag.id.d.ts.map +0 -1
- package/build/const/tiff.tag.value.d.ts.map +0 -1
- package/build/const/tiff.version.d.ts.map +0 -1
- package/build/index.d.ts.map +0 -1
- package/build/read/tag/__test__/tag.test.d.ts +0 -2
- package/build/read/tag/__test__/tag.test.d.ts.map +0 -1
- package/build/read/tag/__test__/tag.test.js +0 -23
- package/build/read/tag/tiff.tag.base.d.ts +0 -55
- package/build/read/tag/tiff.tag.base.d.ts.map +0 -1
- package/build/read/tag/tiff.tag.base.js +0 -79
- package/build/read/tag/tiff.tag.lazy.d.ts +0 -7
- package/build/read/tag/tiff.tag.lazy.d.ts.map +0 -1
- package/build/read/tag/tiff.tag.lazy.js +0 -18
- package/build/read/tag/tiff.tag.offset.d.ts +0 -21
- package/build/read/tag/tiff.tag.offset.d.ts.map +0 -1
- package/build/read/tag/tiff.tag.offset.js +0 -54
- package/build/read/tag/tiff.tag.static.d.ts +0 -8
- package/build/read/tag/tiff.tag.static.d.ts.map +0 -1
- package/build/read/tag/tiff.tag.static.js +0 -17
- package/build/read/tiff.gdal.d.ts.map +0 -1
- package/build/read/tiff.ifd.config.d.ts.map +0 -1
- package/build/read/tiff.tag.d.ts.map +0 -1
- package/build/read/tiff.value.reader.d.ts.map +0 -1
- package/build/source/cog.source.view.d.ts +0 -33
- package/build/source/cog.source.view.d.ts.map +0 -1
- package/build/source/cog.source.view.js +0 -65
- package/build/util/util.hex.d.ts.map +0 -1
- package/build/vector.d.ts.map +0 -1
- package/src/@types/ieee754.d.ts +0 -18
- package/src/read/tag/__test__/tag.test.ts +0 -27
- package/src/read/tag/tiff.tag.base.ts +0 -126
- package/src/read/tag/tiff.tag.lazy.ts +0 -17
- package/src/read/tag/tiff.tag.offset.ts +0 -61
- package/src/read/tag/tiff.tag.static.ts +0 -15
- package/src/source/cog.source.view.ts +0 -77
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export class SourceMemory {
|
|
2
|
+
static toArrayBuffer(buf) {
|
|
3
|
+
if (buf instanceof ArrayBuffer)
|
|
4
|
+
return buf;
|
|
5
|
+
if (buf.byteLength === buf.buffer.byteLength)
|
|
6
|
+
return buf.buffer;
|
|
7
|
+
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
|
|
8
|
+
}
|
|
9
|
+
constructor(bytes) {
|
|
10
|
+
Object.defineProperty(this, "url", {
|
|
11
|
+
enumerable: true,
|
|
12
|
+
configurable: true,
|
|
13
|
+
writable: true,
|
|
14
|
+
value: void 0
|
|
15
|
+
});
|
|
16
|
+
Object.defineProperty(this, "data", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
configurable: true,
|
|
19
|
+
writable: true,
|
|
20
|
+
value: void 0
|
|
21
|
+
});
|
|
22
|
+
this.url = new URL('memory://fake-file');
|
|
23
|
+
this.data = SourceMemory.toArrayBuffer(bytes);
|
|
24
|
+
}
|
|
25
|
+
async fetch(offset, length) {
|
|
26
|
+
// console.log('Fetch', offset, length);
|
|
27
|
+
if (offset < 0)
|
|
28
|
+
offset = this.data.byteLength + offset;
|
|
29
|
+
return this.data.slice(offset, length == null ? undefined : offset + length);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=source.memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source.memory.js","sourceRoot":"","sources":["../../src/__benchmark__/source.memory.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,YAAY;IAIvB,MAAM,CAAC,aAAa,CAAC,GAAsC;QACzD,IAAI,GAAG,YAAY,WAAW;YAAE,OAAO,GAAG,CAAC;QAC3C,IAAI,GAAG,CAAC,UAAU,KAAK,GAAG,CAAC,MAAM,CAAC,UAAU;YAAE,OAAO,GAAG,CAAC,MAAM,CAAC;QAChE,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;IAC3E,CAAC;IAED,YAAY,KAAwC;QATpD;;;;;WAAS;QACT;;;;;WAAkB;QAShB,IAAI,CAAC,GAAG,GAAG,IAAI,GAAG,CAAC,oBAAoB,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,MAAc,EAAE,MAAe;QACzC,wCAAwC;QACxC,IAAI,MAAM,GAAG,CAAC;YAAE,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC;QACvD,OAAO,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC;IAC/E,CAAC;CACF"}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=cog.image.test.d.ts.map
|
|
1
|
+
export {};
|
|
@@ -1,136 +1,128 @@
|
|
|
1
|
-
import o from 'ospec';
|
|
2
|
-
import * as path from 'path';
|
|
3
1
|
import { promises as fs } from 'fs';
|
|
4
|
-
import '
|
|
5
|
-
import {
|
|
2
|
+
import assert from 'node:assert';
|
|
3
|
+
import { beforeEach, describe, it } from 'node:test';
|
|
4
|
+
import { TestFileSource } from '../__benchmark__/source.file.js';
|
|
5
|
+
import { SourceMemory } from '../__benchmark__/source.memory.js';
|
|
6
|
+
import { ByteSize } from '../util/bytes.js';
|
|
6
7
|
import { CogTiff } from '../cog.tiff.js';
|
|
7
|
-
import { TiffMimeType } from '../const/
|
|
8
|
-
import { ByteSize, SourceMemory } from '@chunkd/core';
|
|
9
|
-
import { fileURLToPath } from 'url';
|
|
10
|
-
const __dirname = fileURLToPath(import.meta.url);
|
|
8
|
+
import { TiffMimeType } from '../const/tiff.mime.js';
|
|
11
9
|
// 900913 properties.
|
|
12
10
|
const A = 6378137.0;
|
|
13
11
|
const InitialResolution = (2 * Math.PI * A) / 256;
|
|
14
12
|
function getResolution(zoom) {
|
|
15
13
|
return InitialResolution / 2 ** zoom;
|
|
16
14
|
}
|
|
17
|
-
|
|
18
|
-
const cogSourceFile = new
|
|
15
|
+
describe('CogTiled', () => {
|
|
16
|
+
const cogSourceFile = new TestFileSource(new URL('../../data/rgba8_tiled.tiff', import.meta.url));
|
|
19
17
|
const cog = new CogTiff(cogSourceFile);
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
beforeEach(() => cog.init());
|
|
19
|
+
it('should match resolutions to web mercator zoom levels', () => {
|
|
22
20
|
for (let i = 0; i < 14; i++) {
|
|
23
|
-
|
|
21
|
+
assert.equal(cog.getImageByResolution(getResolution(i)).id, 4);
|
|
24
22
|
}
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
23
|
+
assert.equal(cog.getImageByResolution(getResolution(14)).id, 3);
|
|
24
|
+
assert.equal(cog.getImageByResolution(getResolution(15)).id, 2);
|
|
25
|
+
assert.equal(cog.getImageByResolution(getResolution(16)).id, 1);
|
|
26
|
+
assert.equal(cog.getImageByResolution(getResolution(17)).id, 0);
|
|
27
|
+
assert.equal(cog.getImageByResolution(getResolution(18)).id, 0);
|
|
30
28
|
for (let i = 19; i < 32; i++) {
|
|
31
|
-
|
|
29
|
+
assert.equal(cog.getImageByResolution(getResolution(i)).id, 0);
|
|
32
30
|
}
|
|
33
31
|
});
|
|
34
|
-
|
|
32
|
+
it('should get origin from all images', () => {
|
|
35
33
|
const baseOrigin = cog.images[0].origin;
|
|
36
34
|
for (const img of cog.images) {
|
|
37
|
-
|
|
35
|
+
assert.deepEqual(img.origin, baseOrigin);
|
|
38
36
|
}
|
|
39
37
|
});
|
|
40
|
-
|
|
38
|
+
it('should get bounding box from all images', () => {
|
|
41
39
|
const baseOrigin = cog.images[0].bbox;
|
|
42
40
|
for (const img of cog.images) {
|
|
43
|
-
|
|
41
|
+
assert.deepEqual(img.bbox, baseOrigin);
|
|
44
42
|
}
|
|
45
43
|
});
|
|
46
|
-
|
|
44
|
+
it('should be geolocated', () => {
|
|
47
45
|
for (const img of cog.images)
|
|
48
|
-
|
|
46
|
+
assert.equal(img.isGeoLocated, true);
|
|
49
47
|
});
|
|
50
|
-
|
|
48
|
+
it('should scale image resolution for all images', () => {
|
|
51
49
|
const [resX, resY, resZ] = cog.images[0].resolution;
|
|
52
50
|
for (let i = 0; i < cog.images.length; i++) {
|
|
53
51
|
const img = cog.images[i];
|
|
54
52
|
const scale = 2 ** i; // This tiff is scaled at a factor of two per zoom level
|
|
55
|
-
|
|
53
|
+
assert.deepEqual(img.resolution, [resX * scale, resY * scale, resZ]);
|
|
56
54
|
}
|
|
57
55
|
});
|
|
58
|
-
|
|
56
|
+
it('should have tile information', () => {
|
|
59
57
|
const [firstImage] = cog.images;
|
|
60
|
-
|
|
61
|
-
|
|
58
|
+
assert.equal(firstImage.stripCount, 0);
|
|
59
|
+
assert.equal(firstImage.isTiled(), true);
|
|
62
60
|
});
|
|
63
|
-
|
|
61
|
+
it('should hasTile for every tile', async () => {
|
|
64
62
|
const [firstImage] = cog.images;
|
|
65
63
|
for (let x = 0; x < firstImage.tileCount.x; x++) {
|
|
66
64
|
for (let y = 0; y < firstImage.tileCount.y; y++) {
|
|
67
|
-
|
|
65
|
+
assert.equal(await firstImage.hasTile(x, y), true);
|
|
68
66
|
}
|
|
69
67
|
}
|
|
70
68
|
});
|
|
71
69
|
});
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const fullSource = new
|
|
75
|
-
fullSource.chunkSize = 27902;
|
|
76
|
-
await fullSource.loadBytes(0, 27902);
|
|
70
|
+
describe('Cog.Big', () => {
|
|
71
|
+
it('should support reading from memory', async () => {
|
|
72
|
+
const fullSource = new TestFileSource(new URL('../../data/sparse.tiff', import.meta.url));
|
|
77
73
|
const cog = new CogTiff(fullSource);
|
|
78
74
|
await cog.init();
|
|
79
|
-
o(fullSource.chunkSize).equals(27902);
|
|
80
|
-
o(fullSource.chunks.size).equals(1);
|
|
81
75
|
const [firstImage] = cog.images;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
const img = cog.
|
|
85
|
-
|
|
86
|
-
});
|
|
87
|
-
|
|
88
|
-
const bytes = await fs.readFile(
|
|
89
|
-
const source = new SourceMemory(
|
|
76
|
+
assert.equal(firstImage.stripCount, 0);
|
|
77
|
+
assert.equal(firstImage.isTiled(), true);
|
|
78
|
+
const img = cog.images[4];
|
|
79
|
+
assert.deepEqual(img.tileCount, { x: 2, y: 2 });
|
|
80
|
+
});
|
|
81
|
+
it('should read using a memory source', async () => {
|
|
82
|
+
const bytes = await fs.readFile(new URL('../../data/sparse.tiff', import.meta.url));
|
|
83
|
+
const source = new SourceMemory(bytes.buffer);
|
|
90
84
|
const cog = new CogTiff(source);
|
|
91
85
|
await cog.init();
|
|
92
|
-
o(source.chunkSize).equals(27902);
|
|
93
|
-
o(source.chunks.size).equals(1);
|
|
94
86
|
const [firstImage] = cog.images;
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
const img = cog.
|
|
98
|
-
|
|
87
|
+
assert.equal(firstImage.stripCount, 0);
|
|
88
|
+
assert.equal(firstImage.isTiled(), true);
|
|
89
|
+
const img = cog.images[4];
|
|
90
|
+
assert.deepEqual(img.tileCount, { x: 2, y: 2 });
|
|
99
91
|
});
|
|
100
92
|
});
|
|
101
|
-
|
|
102
|
-
const cogSourceFile = new
|
|
93
|
+
describe('Cog.Sparse', () => {
|
|
94
|
+
const cogSourceFile = new TestFileSource(new URL('../../data/sparse.tiff', import.meta.url));
|
|
103
95
|
const cog = new CogTiff(cogSourceFile);
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
96
|
+
it('should read metadata', async () => {
|
|
97
|
+
await cog.init();
|
|
98
|
+
assert.equal(cog.images[0].epsg, 2193);
|
|
107
99
|
});
|
|
108
|
-
|
|
100
|
+
it('should be geolocated', () => {
|
|
109
101
|
for (const img of cog.images)
|
|
110
|
-
|
|
102
|
+
assert.equal(img.isGeoLocated, true);
|
|
111
103
|
});
|
|
112
|
-
|
|
104
|
+
it('should support sparse cogs', async () => {
|
|
113
105
|
const z = 4;
|
|
114
|
-
const img = cog.
|
|
106
|
+
const img = cog.images[z];
|
|
115
107
|
const { tileCount } = img;
|
|
116
|
-
|
|
108
|
+
assert.deepEqual(tileCount, { x: 2, y: 2 });
|
|
117
109
|
for (let x = 0; x < tileCount.x; x++) {
|
|
118
110
|
for (let y = 0; y < tileCount.y; y++) {
|
|
119
111
|
const hasTile = await img.hasTile(x, y);
|
|
120
|
-
|
|
112
|
+
assert.equal(hasTile, false);
|
|
121
113
|
const tileXy = await img.getTile(x, y);
|
|
122
|
-
const tileXyz = await cog.getTile(x, y
|
|
123
|
-
|
|
124
|
-
|
|
114
|
+
const tileXyz = await cog.images[z].getTile(x, y);
|
|
115
|
+
assert.equal(tileXy, null, `Tile x:${x} y:${y} should be empty`);
|
|
116
|
+
assert.equal(tileXyz, null, `Tile x:${x} y:${y} z: ${z} should be empty`);
|
|
125
117
|
}
|
|
126
118
|
}
|
|
127
119
|
});
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
const entries = [...cog.options
|
|
133
|
-
|
|
120
|
+
it('should have ghost options', () => {
|
|
121
|
+
assert.equal(cog.options?.options.size, 6);
|
|
122
|
+
assert.equal(cog.options?.tileLeaderByteSize, ByteSize.UInt32);
|
|
123
|
+
assert.equal(cog.options?.isCogOptimized, true);
|
|
124
|
+
const entries = [...(cog.options?.options.entries() ?? [])];
|
|
125
|
+
assert.deepEqual(entries, [
|
|
134
126
|
['GDAL_STRUCTURAL_METADATA_SIZE', '000140 bytes'],
|
|
135
127
|
['LAYOUT', 'IFDS_BEFORE_DATA'],
|
|
136
128
|
['BLOCK_ORDER', 'ROW_MAJOR'],
|
|
@@ -140,40 +132,40 @@ o.spec('Cog.Sparse', () => {
|
|
|
140
132
|
]);
|
|
141
133
|
});
|
|
142
134
|
});
|
|
143
|
-
|
|
144
|
-
const cogSourceFile = new
|
|
135
|
+
describe('CogStrip', () => {
|
|
136
|
+
const cogSourceFile = new TestFileSource(new URL('../../data/rgba8_strip.tiff', import.meta.url));
|
|
145
137
|
const cog = new CogTiff(cogSourceFile);
|
|
146
|
-
|
|
147
|
-
|
|
138
|
+
beforeEach(() => cog.init());
|
|
139
|
+
it('should get origin from all images', () => {
|
|
148
140
|
const baseOrigin = cog.images[0].origin;
|
|
149
141
|
for (const img of cog.images) {
|
|
150
|
-
|
|
142
|
+
assert.deepEqual(img.origin, baseOrigin);
|
|
151
143
|
}
|
|
152
144
|
});
|
|
153
|
-
|
|
145
|
+
it('should get bounding box from all images', () => {
|
|
154
146
|
const baseOrigin = cog.images[0].bbox;
|
|
155
147
|
for (const img of cog.images) {
|
|
156
|
-
|
|
148
|
+
assert.deepEqual(img.bbox, baseOrigin);
|
|
157
149
|
}
|
|
158
150
|
});
|
|
159
|
-
|
|
151
|
+
it('should scale image resolution for all images', () => {
|
|
160
152
|
const [resX, resY, resZ] = cog.images[0].resolution;
|
|
161
153
|
for (let i = 0; i < cog.images.length; i++) {
|
|
162
154
|
const img = cog.images[i];
|
|
163
155
|
const scale = 2 ** i; // This tiff is scaled at a factor of two per zoom level
|
|
164
|
-
|
|
156
|
+
assert.deepEqual(img.resolution, [resX * scale, resY * scale, resZ]);
|
|
165
157
|
}
|
|
166
158
|
});
|
|
167
|
-
|
|
159
|
+
it('should have strip information', async () => {
|
|
168
160
|
const [firstImage] = cog.images;
|
|
169
|
-
|
|
170
|
-
|
|
161
|
+
assert.equal(firstImage.isTiled(), false);
|
|
162
|
+
assert.equal(firstImage.stripCount, 2);
|
|
171
163
|
const stripA = await firstImage.getStrip(0);
|
|
172
|
-
|
|
173
|
-
|
|
164
|
+
assert.equal(stripA?.mimeType, TiffMimeType.Webp);
|
|
165
|
+
assert.equal(stripA?.bytes.byteLength, 152);
|
|
174
166
|
const stripB = await firstImage.getStrip(1);
|
|
175
|
-
|
|
176
|
-
|
|
167
|
+
assert.equal(stripB?.mimeType, TiffMimeType.Webp);
|
|
168
|
+
assert.equal(stripB?.bytes.byteLength, 152);
|
|
177
169
|
});
|
|
178
170
|
});
|
|
179
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29nLmltYWdlLnRlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvX190ZXN0X18vY29nLmltYWdlLnRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxDQUFDLE1BQU0sT0FBTyxDQUFDO0FBQ3RCLE9BQU8sS0FBSyxJQUFJLE1BQU0sTUFBTSxDQUFDO0FBQzdCLE9BQU8sRUFBRSxRQUFRLElBQUksRUFBRSxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBRXBDLE9BQU8sZ0NBQWdDLENBQUM7QUFFeEMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0RBQWtELENBQUM7QUFDdkYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pDLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUN0RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sS0FBSyxDQUFDO0FBRXBDLE1BQU0sU0FBUyxHQUFHLGFBQWEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pELHFCQUFxQjtBQUNyQixNQUFNLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDcEIsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUVsRCxTQUFTLGFBQWEsQ0FBQyxJQUFZO0lBQy9CLE9BQU8saUJBQWlCLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUN6QyxDQUFDO0FBRUQsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFO0lBQ3BCLE1BQU0sYUFBYSxHQUFHLElBQUksbUJBQW1CLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQyxDQUFD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QUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFbkMsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFeEMsTUFBTSxNQUFNLEdBQUcsTUFBTSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVDLENBQUMsQ0FBQyxNQUFNLGFBQU4sTUFBTSx1QkFBTixNQUFNLENBQUUsUUFBUSxDQUFDLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUM5QyxDQUFDLENBQUMsTUFBTSxhQUFOLE1BQU0sdUJBQU4sTUFBTSxDQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7QUFDUCxDQUFDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBvIGZyb20gJ29zcGVjJztcbmltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBwcm9taXNlcyBhcyBmcyB9IGZyb20gJ2ZzJztcblxuaW1wb3J0ICdzb3VyY2UtbWFwLXN1cHBvcnQvcmVnaXN0ZXIuanMnO1xuXG5pbXBvcnQgeyBUZXN0RmlsZUNodW5rU291cmNlIH0gZnJvbSAnQGNodW5rZC9jb3JlL2J1aWxkL19fdGVzdF9fL2NodW5rLnNvdXJjZS5mYWtlLmpzJztcbmltcG9ydCB7IENvZ1RpZmYgfSBmcm9tICcuLi9jb2cudGlmZi5qcyc7XG5pbXBvcnQgeyBUaWZmTWltZVR5cGUgfSBmcm9tICcuLi9jb25zdC9pbmRleC5qcyc7XG5pbXBvcnQgeyBCeXRlU2l6ZSwgU291cmNlTWVtb3J5IH0gZnJvbSAnQGNodW5rZC9jb3JlJztcbmltcG9ydCB7IGZpbGVVUkxUb1BhdGggfSBmcm9tICd1cmwnO1xuXG5jb25zdCBfX2Rpcm5hbWUgPSBmaWxlVVJMVG9QYXRoKGltcG9ydC5tZXRhLnVybCk7XG4vLyA5MDA5MTMgcHJvcGVydGllcy5cbmNvbnN0IEEgPSA2Mzc4MTM3LjA7XG5jb25zdCBJbml0aWFsUmVzb2x1dGlvbiA9ICgyICogTWF0aC5QSSAqIEEpIC8gMjU2O1xuXG5mdW5jdGlvbiBnZXRSZXNvbHV0aW9uKHpvb206IG51bWJlcik6IG51bWJlciB7XG4gICAgcmV0dXJuIEluaXRpYWxSZXNvbHV0aW9uIC8gMiAqKiB6b29tO1xufVxuXG5vLnNwZWMoJ0NvZ1RpbGVkJywgKCkgPT4ge1xuICAgIGNvbnN0IGNvZ1NvdXJjZUZpbGUgPSBuZXcgVGVzdEZpbGVDaHVua1NvdXJjZShwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vLi4vZGF0YS9yZ2JhOF90aWxlZC50aWZmJykpO1xuICAgIGNvbnN0IGNvZyA9IG5ldyBDb2dUaWZmKGNvZ1NvdXJjZUZpbGUpO1xuXG4gICAgby5iZWZvcmVFYWNoKCgpID0+IGNvZy5pbml0KCkpO1xuXG4gICAgbygnc2hvdWxkIG1hdGNoIHJlc29sdXRpb25zIHRvIHdlYiBtZXJjYXRvciB6b29tIGxldmVscycsICgpID0+IHtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAxNDsgaSsrKSB7XG4gICAgICAgICAgICBvKGNvZy5nZXRJbWFnZUJ5UmVzb2x1dGlvbihnZXRSZXNvbHV0aW9uKGkpKS5pZCkuZXF1YWxzKDQpO1xuICAgICAgICB9XG5cbiAgICAgICAgbyhjb2cuZ2V0SW1hZ2VCeVJlc29sdXRpb24oZ2V0UmVzb2x1dGlvbigxNCkpLmlkKS5lcXVhbHMoMyk7XG4gICAgICAgIG8oY29nLmdldEltYWdlQnlSZXNvbHV0aW9uKGdldFJlc29sdXRpb24oMTUpKS5pZCkuZXF1YWxzKDIpO1xuICAgICAgICBvKGNvZy5nZXRJbWFnZUJ5UmVzb2x1dGlvbihnZXRSZXNvbHV0aW9uKDE2KSkuaWQpLmVxdWFscygxKTtcbiAgICAgICAgbyhjb2cuZ2V0SW1hZ2VCeVJlc29sdXRpb24oZ2V0UmVzb2x1dGlvbigxNykpLmlkKS5lcXVhbHMoMCk7XG4gICAgICAgIG8oY29nLmdldEltYWdlQnlSZXNvbHV0aW9uKGdldFJlc29sdXRpb24oMTgpKS5pZCkuZXF1YWxzKDApO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAxOTsgaSA8IDMyOyBpKyspIHtcbiAgICAgICAgICAgIG8oY29nLmdldEltYWdlQnlSZXNvbHV0aW9uKGdldFJlc29sdXRpb24oaSkpLmlkKS5lcXVhbHMoMCk7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIG8oJ3Nob3VsZCBnZXQgb3JpZ2luIGZyb20gYWxsIGltYWdlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgYmFzZU9yaWdpbiA9IGNvZy5pbWFnZXNbMF0ub3JpZ2luO1xuICAgICAgICBmb3IgKGNvbnN0IGltZyBvZiBjb2cuaW1hZ2VzKSB7XG4gICAgICAgICAgICBvKGltZy5vcmlnaW4pLmRlZXBFcXVhbHMoYmFzZU9yaWdpbik7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIG8oJ3Nob3VsZCBnZXQgYm91bmRpbmcgYm94IGZyb20gYWxsIGltYWdlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgYmFzZU9yaWdpbiA9IGNvZy5pbWFnZXNbMF0uYmJveDtcbiAgICAgICAgZm9yIChjb25zdCBpbWcgb2YgY29nLmltYWdlcykge1xuICAgICAgICAgICAgbyhpbWcuYmJveCkuZGVlcEVxdWFscyhiYXNlT3JpZ2luKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgbygnc2hvdWxkIGJlIGdlb2xvY2F0ZWQnLCAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgaW1nIG9mIGNvZy5pbWFnZXMpIG8oaW1nLmlzR2VvTG9jYXRlZCkuZXF1YWxzKHRydWUpO1xuICAgIH0pO1xuXG4gICAgbygnc2hvdWxkIHNjYWxlIGltYWdlIHJlc29sdXRpb24gZm9yIGFsbCBpbWFnZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IFtyZXNYLCByZXNZLCByZXNaXSA9IGNvZy5pbWFnZXNbMF0ucmVzb2x1dGlvbjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2cuaW1hZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSBjb2cuaW1hZ2VzW2ldO1xuICAgICAgICAgICAgY29uc3Qgc2NhbGUgPSAyICoqIGk7IC8vIFRoaXMgdGlmZiBpcyBzY2FsZWQgYXQgYSBmYWN0b3Igb2YgdHdvIHBlciB6b29tIGxldmVsXG4gICAgICAgICAgICBvKGltZy5yZXNvbHV0aW9uKS5kZWVwRXF1YWxzKFtyZXNYICogc2NhbGUsIHJlc1kgKiBzY2FsZSwgcmVzWl0pO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBvKCdzaG91bGQgaGF2ZSB0aWxlIGluZm9ybWF0aW9uJywgKCkgPT4ge1xuICAgICAgICBjb25zdCBbZmlyc3RJbWFnZV0gPSBjb2cuaW1hZ2VzO1xuICAgICAgICBvKGZpcnN0SW1hZ2Uuc3RyaXBDb3VudCkuZXF1YWxzKDApO1xuICAgICAgICBvKGZpcnN0SW1hZ2UuaXNUaWxlZCgpKS5lcXVhbHModHJ1ZSk7XG4gICAgfSk7XG5cbiAgICBvKCdzaG91bGQgaGFzVGlsZSBmb3IgZXZlcnkgdGlsZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgW2ZpcnN0SW1hZ2VdID0gY29nLmltYWdlcztcblxuICAgICAgICBmb3IgKGxldCB4ID0gMDsgeCA8IGZpcnN0SW1hZ2UudGlsZUNvdW50Lng7IHgrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCBmaXJzdEltYWdlLnRpbGVDb3VudC55OyB5KyspIHtcbiAgICAgICAgICAgICAgICBvKGF3YWl0IGZpcnN0SW1hZ2UuaGFzVGlsZSh4LCB5KSkuZXF1YWxzKHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSk7XG59KTtcblxuby5zcGVjKCdDb2cuQmlnJywgKCkgPT4ge1xuICAgIG8oJ3Nob3VsZCBzdXBwb3J0IHJlYWRpbmcgZnJvbSBtZW1vcnknLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGZ1bGxTb3VyY2UgPSBuZXcgVGVzdEZpbGVDaHVua1NvdXJjZShwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vLi4vZGF0YS9zcGFyc2UudGlmZicpKTtcbiAgICAgICAgZnVsbFNvdXJjZS5jaHVua1NpemUgPSAyNzkwMjtcbiAgICAgICAgYXdhaXQgZnVsbFNvdXJjZS5sb2FkQnl0ZXMoMCwgMjc5MDIpO1xuICAgICAgICBjb25zdCBjb2cgPSBuZXcgQ29nVGlmZihmdWxsU291cmNlKTtcbiAgICAgICAgYXdhaXQgY29nLmluaXQoKTtcblxuICAgICAgICBvKGZ1bGxTb3VyY2UuY2h1bmtTaXplKS5lcXVhbHMoMjc5MDIpO1xuICAgICAgICBvKGZ1bGxTb3VyY2UuY2h1bmtzLnNpemUpLmVxdWFscygxKTtcbiAgICAgICAgY29uc3QgW2ZpcnN0SW1hZ2VdID0gY29nLmltYWdlcztcbiAgICAgICAgbyhmaXJzdEltYWdlLnN0cmlwQ291bnQpLmVxdWFscygwKTtcbiAgICAgICAgbyhmaXJzdEltYWdlLmlzVGlsZWQoKSkuZXF1YWxzKHRydWUpO1xuXG4gICAgICAgIGNvbnN0IGltZyA9IGNvZy5nZXRJbWFnZSg0KTtcbiAgICAgICAgbyhpbWcudGlsZUNvdW50KS5kZWVwRXF1YWxzKHsgeDogMiwgeTogMiB9KTtcbiAgICB9KTtcblxuICAgIG8oJ3Nob3VsZCByZWFkIHVzaW5nIGEgbWVtb3J5IHNvdXJjZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgYnl0ZXMgPSBhd2FpdCBmcy5yZWFkRmlsZShwYXRoLmpvaW4oX19kaXJuYW1lLCAnLi4vLi4vLi4vZGF0YS9zcGFyc2UudGlmZicpKTtcbiAgICAgICAgY29uc3Qgc291cmNlID0gbmV3IFNvdXJjZU1lbW9yeSgnU3BhcnNlLnRpZmYnLCBieXRlcy5idWZmZXIpO1xuICAgICAgICBjb25zdCBjb2cgPSBuZXcgQ29nVGlmZihzb3VyY2UpO1xuICAgICAgICBhd2FpdCBjb2cuaW5pdCgpO1xuXG4gICAgICAgIG8oc291cmNlLmNodW5rU2l6ZSkuZXF1YWxzKDI3OTAyKTtcbiAgICAgICAgbyhzb3VyY2UuY2h1bmtzLnNpemUpLmVxdWFscygxKTtcbiAgICAgICAgY29uc3QgW2ZpcnN0SW1hZ2VdID0gY29nLmltYWdlcztcbiAgICAgICAgbyhmaXJzdEltYWdlLnN0cmlwQ291bnQpLmVxdWFscygwKTtcbiAgICAgICAgbyhmaXJzdEltYWdlLmlzVGlsZWQoKSkuZXF1YWxzKHRydWUpO1xuXG4gICAgICAgIGNvbnN0IGltZyA9IGNvZy5nZXRJbWFnZSg0KTtcbiAgICAgICAgbyhpbWcudGlsZUNvdW50KS5kZWVwRXF1YWxzKHsgeDogMiwgeTogMiB9KTtcbiAgICB9KTtcbn0pO1xuXG5vLnNwZWMoJ0NvZy5TcGFyc2UnLCAoKSA9PiB7XG4gICAgY29uc3QgY29nU291cmNlRmlsZSA9IG5ldyBUZXN0RmlsZUNodW5rU291cmNlKHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi8uLi8uLi9kYXRhL3NwYXJzZS50aWZmJykpO1xuICAgIGNvbnN0IGNvZyA9IG5ldyBDb2dUaWZmKGNvZ1NvdXJjZUZpbGUpO1xuICAgIG8uYmVmb3JlRWFjaCgoKSA9PiBjb2cuaW5pdCh0cnVlKSk7XG5cbiAgICBvKCdzaG91bGQgcmVhZCBtZXRhZGF0YScsICgpID0+IHtcbiAgICAgICAgbyhjb2cuZ2V0SW1hZ2UoMCkuZXBzZykuZXF1YWxzKDIxOTMpO1xuICAgIH0pO1xuXG4gICAgbygnc2hvdWxkIGJlIGdlb2xvY2F0ZWQnLCAoKSA9PiB7XG4gICAgICAgIGZvciAoY29uc3QgaW1nIG9mIGNvZy5pbWFnZXMpIG8oaW1nLmlzR2VvTG9jYXRlZCkuZXF1YWxzKHRydWUpO1xuICAgIH0pO1xuXG4gICAgbygnc2hvdWxkIHN1cHBvcnQgc3BhcnNlIGNvZ3MnLCBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHogPSA0O1xuICAgICAgICBjb25zdCBpbWcgPSBjb2cuZ2V0SW1hZ2Uoeik7XG5cbiAgICAgICAgY29uc3QgeyB0aWxlQ291bnQgfSA9IGltZztcbiAgICAgICAgbyh0aWxlQ291bnQpLmRlZXBFcXVhbHMoeyB4OiAyLCB5OiAyIH0pO1xuXG4gICAgICAgIGZvciAobGV0IHggPSAwOyB4IDwgdGlsZUNvdW50Lng7IHgrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgeSA9IDA7IHkgPCB0aWxlQ291bnQueTsgeSsrKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzVGlsZSA9IGF3YWl0IGltZy5oYXNUaWxlKHgsIHkpO1xuICAgICAgICAgICAgICAgIG8oaGFzVGlsZSkuZXF1YWxzKGZhbHNlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlWHkgPSBhd2FpdCBpbWcuZ2V0VGlsZSh4LCB5KTtcbiAgICAgICAgICAgICAgICBjb25zdCB0aWxlWHl6ID0gYXdhaXQgY29nLmdldFRpbGUoeCwgeSwgeik7XG4gICAgICAgICAgICAgICAgbyh0aWxlWHkpLmVxdWFscyhudWxsKShgVGlsZSB4OiR7eH0geToke3l9IHNob3VsZCBiZSBlbXB0eWApO1xuICAgICAgICAgICAgICAgIG8odGlsZVh5eikuZXF1YWxzKG51bGwpKGBUaWxlIHg6JHt4fSB5OiR7eX0gejogJHt6fSBzaG91bGQgYmUgZW1wdHlgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgbygnc2hvdWxkIGhhdmUgZ2hvc3Qgb3B0aW9ucycsICgpID0+IHtcbiAgICAgICAgbyhjb2cub3B0aW9ucy5vcHRpb25zLnNpemUpLmVxdWFscyg2KTtcbiAgICAgICAgbyhjb2cub3B0aW9ucy50aWxlTGVhZGVyQnl0ZVNpemUpLmVxdWFscyhCeXRlU2l6ZS5VSW50MzIpO1xuICAgICAgICBvKGNvZy5vcHRpb25zLmlzQ29nT3B0aW1pemVkKS5lcXVhbHModHJ1ZSk7XG5cbiAgICAgICAgY29uc3QgZW50cmllcyA9IFsuLi5jb2cub3B0aW9ucy5vcHRpb25zLmVudHJpZXMoKV07XG4gICAgICAgIG8oZW50cmllcykuZGVlcEVxdWFscyhbXG4gICAgICAgICAgICBbJ0dEQUxfU1RSVUNUVVJBTF9NRVRBREFUQV9TSVpFJywgJzAwMDE0MCBieXRlcyddLFxuICAgICAgICAgICAgWydMQVlPVVQnLCAnSUZEU19CRUZPUkVfREFUQSddLFxuICAgICAgICAgICAgWydCTE9DS19PUkRFUicsICdST1dfTUFKT1InXSxcbiAgICAgICAgICAgIFsnQkxPQ0tfTEVBREVSJywgJ1NJWkVfQVNfVUlOVDQnXSxcbiAgICAgICAgICAgIFsnQkxPQ0tfVFJBSUxFUicsICdMQVNUXzRfQllURVNfUkVQRUFURUQnXSxcbiAgICAgICAgICAgIFsnS05PV05fSU5DT01QQVRJQkxFX0VESVRJT04nLCAnTk8nXSxcbiAgICAgICAgXSk7XG4gICAgfSk7XG59KTtcblxuby5zcGVjKCdDb2dTdHJpcCcsICgpID0+IHtcbiAgICBjb25zdCBjb2dTb3VyY2VGaWxlID0gbmV3IFRlc3RGaWxlQ2h1bmtTb3VyY2UocGF0aC5qb2luKF9fZGlybmFtZSwgJy4uLy4uLy4uL2RhdGEvcmdiYThfc3RyaXAudGlmZicpKTtcbiAgICBjb25zdCBjb2cgPSBuZXcgQ29nVGlmZihjb2dTb3VyY2VGaWxlKTtcblxuICAgIG8uYmVmb3JlRWFjaCgoKSA9PiBjb2cuaW5pdCgpKTtcblxuICAgIG8oJ3Nob3VsZCBnZXQgb3JpZ2luIGZyb20gYWxsIGltYWdlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgYmFzZU9yaWdpbiA9IGNvZy5pbWFnZXNbMF0ub3JpZ2luO1xuICAgICAgICBmb3IgKGNvbnN0IGltZyBvZiBjb2cuaW1hZ2VzKSB7XG4gICAgICAgICAgICBvKGltZy5vcmlnaW4pLmRlZXBFcXVhbHMoYmFzZU9yaWdpbik7XG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIG8oJ3Nob3VsZCBnZXQgYm91bmRpbmcgYm94IGZyb20gYWxsIGltYWdlcycsICgpID0+IHtcbiAgICAgICAgY29uc3QgYmFzZU9yaWdpbiA9IGNvZy5pbWFnZXNbMF0uYmJveDtcbiAgICAgICAgZm9yIChjb25zdCBpbWcgb2YgY29nLmltYWdlcykge1xuICAgICAgICAgICAgbyhpbWcuYmJveCkuZGVlcEVxdWFscyhiYXNlT3JpZ2luKTtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgbygnc2hvdWxkIHNjYWxlIGltYWdlIHJlc29sdXRpb24gZm9yIGFsbCBpbWFnZXMnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IFtyZXNYLCByZXNZLCByZXNaXSA9IGNvZy5pbWFnZXNbMF0ucmVzb2x1dGlvbjtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2cuaW1hZ2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBpbWcgPSBjb2cuaW1hZ2VzW2ldO1xuICAgICAgICAgICAgY29uc3Qgc2NhbGUgPSAyICoqIGk7IC8vIFRoaXMgdGlmZiBpcyBzY2FsZWQgYXQgYSBmYWN0b3Igb2YgdHdvIHBlciB6b29tIGxldmVsXG4gICAgICAgICAgICBvKGltZy5yZXNvbHV0aW9uKS5kZWVwRXF1YWxzKFtyZXNYICogc2NhbGUsIHJlc1kgKiBzY2FsZSwgcmVzWl0pO1xuICAgICAgICB9XG4gICAgfSk7XG5cbiAgICBvKCdzaG91bGQgaGF2ZSBzdHJpcCBpbmZvcm1hdGlvbicsIGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgW2ZpcnN0SW1hZ2VdID0gY29nLmltYWdlcztcbiAgICAgICAgbyhmaXJzdEltYWdlLmlzVGlsZWQoKSkuZXF1YWxzKGZhbHNlKTtcbiAgICAgICAgbyhmaXJzdEltYWdlLnN0cmlwQ291bnQpLmVxdWFscygyKTtcblxuICAgICAgICBjb25zdCBzdHJpcEEgPSBhd2FpdCBmaXJzdEltYWdlLmdldFN0cmlwKDApO1xuICAgICAgICBvKHN0cmlwQT8ubWltZVR5cGUpLmVxdWFscyhUaWZmTWltZVR5cGUuV0VCUCk7XG4gICAgICAgIG8oc3RyaXBBPy5ieXRlcy5ieXRlTGVuZ3RoKS5lcXVhbHMoMTUyKTtcblxuICAgICAgICBjb25zdCBzdHJpcEIgPSBhd2FpdCBmaXJzdEltYWdlLmdldFN0cmlwKDEpO1xuICAgICAgICBvKHN0cmlwQj8ubWltZVR5cGUpLmVxdWFscyhUaWZmTWltZVR5cGUuV0VCUCk7XG4gICAgICAgIG8oc3RyaXBCPy5ieXRlcy5ieXRlTGVuZ3RoKS5lcXVhbHMoMTUyKTtcbiAgICB9KTtcbn0pO1xuIl19
|
|
171
|
+
//# sourceMappingURL=cog.image.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cog.image.test.js","sourceRoot":"","sources":["../../src/__test__/cog.image.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
//# sourceMappingURL=cog.read.test.d.ts.map
|
|
1
|
+
export {};
|
|
@@ -1,72 +1,54 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import 'source-map-support/register.js';
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import { describe, it } from 'node:test';
|
|
4
3
|
import { CogTiff } from '../cog.tiff.js';
|
|
5
|
-
import { TiffVersion } from '../const/tiff.version.js';
|
|
6
4
|
import { TiffMimeType } from '../const/tiff.mime.js';
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
10
|
-
|
|
5
|
+
import { TestFileSource } from '../__benchmark__/source.file.js';
|
|
6
|
+
import { TiffVersion } from '../const/tiff.version.js';
|
|
7
|
+
function validate(tif) {
|
|
8
|
+
assert.equal(tif.images.length, 5);
|
|
9
|
+
const [firstTif] = tif.images;
|
|
10
|
+
assert.equal(firstTif.isTiled(), true);
|
|
11
|
+
assert.deepEqual(firstTif.tileSize, { width: 256, height: 256 });
|
|
12
|
+
assert.deepEqual(firstTif.size, { width: 64, height: 64 });
|
|
13
|
+
}
|
|
14
|
+
describe('CogRead', () => {
|
|
11
15
|
// TODO this does not load 100% yet
|
|
12
|
-
//
|
|
13
|
-
// const source = new
|
|
14
|
-
// const
|
|
15
|
-
// await
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
// // o(firstTif.compression).equals('image/jpeg')
|
|
23
|
-
// })
|
|
24
|
-
function validate(tif) {
|
|
25
|
-
o(tif.images.length).equals(5);
|
|
26
|
-
const [firstTif] = tif.images;
|
|
27
|
-
o(firstTif.isTiled()).equals(true);
|
|
28
|
-
o(firstTif.tileSize).deepEquals({ width: 256, height: 256 });
|
|
29
|
-
o(firstTif.size).deepEquals({ width: 64, height: 64 });
|
|
30
|
-
}
|
|
31
|
-
o('should read big tiff', async () => {
|
|
32
|
-
const source = new TestFileChunkSource(path.join(__dirname, '../../../data/big_cog.tif'));
|
|
16
|
+
// it('should read big endian', async () => {
|
|
17
|
+
// const source = new TestFileSource(new URL('../../data/big_cog.tiff', import.meta.url));
|
|
18
|
+
// const tiff = new CogTiff(source);
|
|
19
|
+
// await tiff.init();
|
|
20
|
+
// assert.equal(tiff.isLittleEndian, false);
|
|
21
|
+
// assert.equal(tiff.version, TiffVersion.BigTiff);
|
|
22
|
+
// validate(tiff);
|
|
23
|
+
// });
|
|
24
|
+
it('should read big tiff', async () => {
|
|
25
|
+
const source = new TestFileSource(new URL('../../data/big_cog.tiff', import.meta.url));
|
|
33
26
|
const tiff = new CogTiff(source);
|
|
34
27
|
await tiff.init();
|
|
35
|
-
|
|
36
|
-
|
|
28
|
+
assert.equal(tiff.isLittleEndian, true);
|
|
29
|
+
assert.equal(tiff.version, TiffVersion.BigTiff);
|
|
37
30
|
validate(tiff);
|
|
38
31
|
});
|
|
39
|
-
|
|
40
|
-
const source = new
|
|
32
|
+
it('should read tiff', async () => {
|
|
33
|
+
const source = new TestFileSource(new URL('../../data/cog.tiff', import.meta.url));
|
|
41
34
|
const tiff = new CogTiff(source);
|
|
42
35
|
await tiff.init();
|
|
43
|
-
|
|
44
|
-
|
|
36
|
+
assert.equal(tiff.isLittleEndian, true);
|
|
37
|
+
assert.equal(tiff.version, TiffVersion.Tiff);
|
|
45
38
|
validate(tiff);
|
|
46
39
|
const [firstTif] = tiff.images;
|
|
47
|
-
|
|
40
|
+
assert.equal(firstTif.compression, TiffMimeType.Jpeg);
|
|
48
41
|
});
|
|
49
|
-
|
|
50
|
-
const source = new
|
|
42
|
+
it('should allow multiple init', async () => {
|
|
43
|
+
const source = new TestFileSource(new URL('../../data/cog.tiff', import.meta.url));
|
|
51
44
|
const tiff = new CogTiff(source);
|
|
52
|
-
|
|
45
|
+
assert.equal(tiff.isInitialized, false);
|
|
53
46
|
await tiff.init();
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
47
|
+
assert.equal(tiff.isInitialized, true);
|
|
48
|
+
assert.equal(tiff.images.length, 5);
|
|
49
|
+
assert.equal(tiff.isInitialized, true);
|
|
57
50
|
await tiff.init();
|
|
58
|
-
|
|
59
|
-
});
|
|
60
|
-
o('should close a source', async () => {
|
|
61
|
-
const source = new TestFileChunkSource(path.join(__dirname, '../../../data/cog.tif'));
|
|
62
|
-
const tiff = new CogTiff(source);
|
|
63
|
-
// Should not close if there is no close
|
|
64
|
-
source.close = undefined;
|
|
65
|
-
await tiff.close();
|
|
66
|
-
const closeSpy = o.spy(() => Promise.resolve());
|
|
67
|
-
source.close = closeSpy;
|
|
68
|
-
await tiff.close();
|
|
69
|
-
o(closeSpy.callCount).equals(1);
|
|
51
|
+
assert.equal(tiff.images.length, 5);
|
|
70
52
|
});
|
|
71
53
|
});
|
|
72
|
-
//# sourceMappingURL=
|
|
54
|
+
//# sourceMappingURL=cog.read.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cog.read.test.js","sourceRoot":"","sources":["../../src/__test__/cog.read.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { SourceHttp } from '@chunkd/source-http';
|
|
2
|
+
import { CogTiff } from '../index.js';
|
|
3
|
+
async function main() {
|
|
4
|
+
const source = new SourceHttp('https://example.com/cog.tif');
|
|
5
|
+
const tiff = await CogTiff.create(source);
|
|
6
|
+
/** Load a specific tile from a specific image */
|
|
7
|
+
const tile = await tiff.images[5].getTile(2, 2);
|
|
8
|
+
if (tile != null) {
|
|
9
|
+
tile.bytes; // Raw image buffer or null if tile doesn't exist
|
|
10
|
+
}
|
|
11
|
+
/** Load the 5th image in the Tiff */
|
|
12
|
+
const img = tiff.images[5];
|
|
13
|
+
if (img.isTiled()) {
|
|
14
|
+
/** Load tile x:10 y:10 */
|
|
15
|
+
const tile = await img.getTile(10, 10);
|
|
16
|
+
if (tile != null) {
|
|
17
|
+
tile.mimeType; // image/jpeg
|
|
18
|
+
tile.bytes; // Raw image buffer
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/** Get the origin point of the tiff */
|
|
22
|
+
img.origin;
|
|
23
|
+
/** Bounding box of the tiff */
|
|
24
|
+
img.bbox;
|
|
25
|
+
}
|
|
26
|
+
main();
|
|
27
|
+
//# sourceMappingURL=example.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"example.js","sourceRoot":"","sources":["../../src/__test__/example.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,KAAK,UAAU,IAAI;IACjB,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,6BAA6B,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE1C,iDAAiD;IACjD,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,IAAI,IAAI,IAAI,IAAI,EAAE;QAChB,IAAI,CAAC,KAAK,CAAC,CAAC,iDAAiD;KAC9D;IAED,qCAAqC;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC3B,IAAI,GAAG,CAAC,OAAO,EAAE,EAAE;QACjB,0BAA0B;QAC1B,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACvC,IAAI,IAAI,IAAI,IAAI,EAAE;YAChB,IAAI,CAAC,QAAQ,CAAC,CAAC,aAAa;YAC5B,IAAI,CAAC,KAAK,CAAC,CAAC,mBAAmB;SAChC;KACF;IAED,uCAAuC;IACvC,GAAG,CAAC,MAAM,CAAC;IACX,+BAA+B;IAC/B,GAAG,CAAC,IAAI,CAAC;AACX,CAAC;AAED,IAAI,EAAE,CAAC"}
|