Skip to content

Commit 069d5f6

Browse files
authored
Merge pull request #32 from thewtex/readImageBlob
feat(readers): implement readImageArrayBuffer
2 parents b67bf76 + a1daf8d commit 069d5f6

3 files changed

Lines changed: 88 additions & 0 deletions

File tree

src/itkreadImageArrayBuffer.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
const PromiseWorker = require('promise-worker-transferable')
2+
3+
const config = require('./itkConfig.js')
4+
5+
const worker = new window.Worker(config.webWorkersPath + '/ImageIOWorker.js')
6+
const promiseWorker = new PromiseWorker(worker)
7+
8+
/**
9+
* @param: buffer arrayBuffer that contains the file contents
10+
* @param: fileName string that contains the file name
11+
* @param: mimeType optional mime-type string
12+
*/
13+
const readImageArrayBuffer = (arrayBuffer, fileName, mimeType) => {
14+
return promiseWorker.postMessage({ name: fileName, type: mimeType, buffer: arrayBuffer }, [arrayBuffer])
15+
}
16+
17+
module.exports = readImageArrayBuffer

src/itkreadImageBlob.js

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
const PromiseWorker = require('promise-worker-transferable')
2+
const PromiseFileReader = require('promise-file-reader')
3+
4+
const config = require('./itkConfig.js')
5+
6+
const worker = new window.Worker(config.webWorkersPath + '/ImageIOWorker.js')
7+
const promiseWorker = new PromiseWorker(worker)
8+
9+
/**
10+
* @param: blob Blob that contains the file contents
11+
* @param: fileName string that contains the file name
12+
* @param: mimeType optional mime-type string
13+
*/
14+
const readImageBlob = (blob, fileName, mimeType) => {
15+
return PromiseFileReader.readAsArrayBuffer(blob)
16+
.then(arrayBuffer => {
17+
return promiseWorker.postMessage({ name: fileName, type: mimeType, buffer: arrayBuffer }, [arrayBuffer])
18+
})
19+
}
20+
21+
module.exports = readImageBlob
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
const test = require('tape')
2+
const PromiseFileReader = require('promise-file-reader')
23

4+
const readImageArrayBuffer = require('itkreadImageArrayBuffer.js')
5+
const readImageBlob = require('itkreadImageBlob.js')
36
const readImageFile = require('itkreadImageFile.js')
47

58
const IntTypes = require('itkIntTypes.js')
@@ -17,6 +20,53 @@ for (let ii = 0; ii < byteString.length; ++ii) {
1720
const cthead1SmallBlob = new window.Blob([intArray], {type: mimeString})
1821
const cthead1SmallFile = new window.File([cthead1SmallBlob], 'cthead1Small.png')
1922

23+
test('readImageArrayBuffer reads an ArrayBuffer', t => {
24+
return PromiseFileReader.readAsArrayBuffer(cthead1SmallFile)
25+
.then(arrayBuffer => {
26+
return readImageArrayBuffer(arrayBuffer, 'cthead1Small.png').then(function (image) {
27+
t.is(image.imageType.dimension, 2, 'dimension')
28+
t.is(image.imageType.componentType, IntTypes.UInt8, 'componentType')
29+
t.is(image.imageType.pixelType, PixelTypes.Scalar, 'pixelType')
30+
t.is(image.imageType.components, 1, 'components')
31+
t.is(image.origin[0], 0.0, 'origin[0]')
32+
t.is(image.origin[1], 0.0, 'origin[1]')
33+
t.is(image.spacing[0], 1.0, 'spacing[0]')
34+
t.is(image.spacing[1], 1.0, 'spacing[1]')
35+
t.is(getMatrixElement(image.direction, 0, 0), 1.0, 'direction (0, 0)')
36+
t.is(getMatrixElement(image.direction, 0, 1), 0.0, 'direction (0, 1)')
37+
t.is(getMatrixElement(image.direction, 1, 0), 0.0, 'direction (1, 0)')
38+
t.is(getMatrixElement(image.direction, 1, 1), 1.0, 'direction (1, 1)')
39+
t.is(image.size[0], 32, 'size[0]')
40+
t.is(image.size[1], 32, 'size[1]')
41+
t.is(image.buffer.length, 1024, 'buffer.length')
42+
t.is(image.buffer[512], 12, 'buffer[512]')
43+
t.end()
44+
})
45+
})
46+
})
47+
48+
test('readImageBlob reads an Blob', t => {
49+
return readImageBlob(cthead1SmallBlob, 'cthead1Small.png').then(function (image) {
50+
t.is(image.imageType.dimension, 2, 'dimension')
51+
t.is(image.imageType.componentType, IntTypes.UInt8, 'componentType')
52+
t.is(image.imageType.pixelType, PixelTypes.Scalar, 'pixelType')
53+
t.is(image.imageType.components, 1, 'components')
54+
t.is(image.origin[0], 0.0, 'origin[0]')
55+
t.is(image.origin[1], 0.0, 'origin[1]')
56+
t.is(image.spacing[0], 1.0, 'spacing[0]')
57+
t.is(image.spacing[1], 1.0, 'spacing[1]')
58+
t.is(getMatrixElement(image.direction, 0, 0), 1.0, 'direction (0, 0)')
59+
t.is(getMatrixElement(image.direction, 0, 1), 0.0, 'direction (0, 1)')
60+
t.is(getMatrixElement(image.direction, 1, 0), 0.0, 'direction (1, 0)')
61+
t.is(getMatrixElement(image.direction, 1, 1), 1.0, 'direction (1, 1)')
62+
t.is(image.size[0], 32, 'size[0]')
63+
t.is(image.size[1], 32, 'size[1]')
64+
t.is(image.buffer.length, 1024, 'buffer.length')
65+
t.is(image.buffer[512], 12, 'buffer[512]')
66+
t.end()
67+
})
68+
})
69+
2070
test('readImageFile reads a File', t => {
2171
return readImageFile(cthead1SmallFile).then(function (image) {
2272
t.is(image.imageType.dimension, 2, 'dimension')

0 commit comments

Comments
 (0)