Skip to content

Commit bdfff4e

Browse files
feat: add loading image from fetching URL (#482)
1 parent 595ca54 commit bdfff4e

File tree

3 files changed

+38
-0
lines changed

3 files changed

+38
-0
lines changed

src/load/__tests__/fetchURL.test.ts

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { encodeDataURL } from '../../save/encodeDataURL.js';
2+
import { fetchURL } from '../fetchURL.js';
3+
4+
describe('testing fetchURL', () => {
5+
test('decodes image from data URL', async () => {
6+
const image = await fetchURL(
7+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAAAAACoBHk5AAAAFklEQVR4XmNggID///+DSCCEskHM/wCAnQr2TY5mOAAAAABJRU5ErkJggg==',
8+
);
9+
expect(image.bitDepth).toBe(8);
10+
expect(image.getRawImage().data).toEqual(
11+
new Uint8Array([
12+
0, 0, 0, 0, 0, 0, 255, 255, 255, 0, 0, 255, 0, 255, 0, 0, 255, 255, 255,
13+
0, 255, 0, 255, 0, 255,
14+
]),
15+
);
16+
});
17+
test('encoded URL must be equal to decoded one', async () => {
18+
const dataURL =
19+
'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAAAAACoBHk5AAAAFklEQVR4XmNggID///+DSCCEskHM/wCAnQr2TY5mOAAAAABJRU5ErkJggg==';
20+
const image = await fetchURL(dataURL);
21+
const result = encodeDataURL(image);
22+
expect(result).toEqual(dataURL);
23+
});
24+
});

src/load/fetchURL.ts

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
import { decode } from './decode.js';
2+
3+
/**
4+
* Fetches image URL and decodes it.
5+
* @param dataUrl - Image URL.
6+
* @returns decoded image data.
7+
*/
8+
export async function fetchURL(dataUrl: string) {
9+
const response = await fetch(dataUrl);
10+
const arrayBuffer = await response.arrayBuffer();
11+
const image = decode(new DataView(arrayBuffer));
12+
return image;
13+
}

src/load/index.ts

+1
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ export * from './load.types.js';
66
export * from './read.js';
77
export * from './readCanvas.js';
88
export * from './readImg.js';
9+
export * from './fetchURL.js';

0 commit comments

Comments
 (0)