@flighthq/image 0.1.0 → 0.2.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.
|
@@ -2,7 +2,6 @@ import type { ImageResource } from '@flighthq/types';
|
|
|
2
2
|
export declare function createImageResourceFromCanvas(canvas: HTMLCanvasElement): ImageResource;
|
|
3
3
|
export declare function createImageResourceFromImageBitmap(bitmap: ImageBitmap): ImageResource;
|
|
4
4
|
export declare function createImageResourceFromImageElement(img: HTMLImageElement): ImageResource;
|
|
5
|
-
export declare function detectImageMimeType(data: ArrayBuffer | Uint8Array): string | null;
|
|
6
5
|
export declare function isImageResourceSameOrigin(url: string): boolean;
|
|
7
6
|
export declare function loadImageResourceFromBase64(base64: string, mimeType: string, signal?: AbortSignal): Promise<ImageResource>;
|
|
8
7
|
export declare function loadImageResourceFromBlob(blob: Blob, signal?: AbortSignal): Promise<ImageResource>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageResourceFrom.d.ts","sourceRoot":"","sources":["../src/imageResourceFrom.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"imageResourceFrom.d.ts","sourceRoot":"","sources":["../src/imageResourceFrom.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAErD,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,iBAAiB,GAAG,aAAa,CAUtF;AAED,wBAAgB,kCAAkC,CAAC,MAAM,EAAE,WAAW,GAAG,aAAa,CAUrF;AAED,wBAAgB,mCAAmC,CAAC,GAAG,EAAE,gBAAgB,GAAG,aAAa,CAUxF;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAO9D;AAED,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,aAAa,CAAC,CAExB;AAED,wBAAsB,yBAAyB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,aAAa,CAAC,CAOxG;AAED,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,UAAU,EACjB,QAAQ,CAAC,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,aAAa,CAAC,CAOxB;AAED,wBAAsB,wBAAwB,CAC5C,GAAG,EAAE,MAAM,EACX,WAAW,CAAC,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,aAAa,CAAC,CAexB"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createEntity } from '@flighthq/entity';
|
|
2
|
+
import { detectImageMimeType } from '@flighthq/image-codec';
|
|
2
3
|
export function createImageResourceFromCanvas(canvas) {
|
|
3
4
|
return createEntity({
|
|
4
5
|
alphaType: 'straight',
|
|
@@ -32,35 +33,6 @@ export function createImageResourceFromImageElement(img) {
|
|
|
32
33
|
width: img.width,
|
|
33
34
|
});
|
|
34
35
|
}
|
|
35
|
-
export function detectImageMimeType(data) {
|
|
36
|
-
const b = data instanceof Uint8Array ? data : new Uint8Array(data);
|
|
37
|
-
if (b.byteLength < 4)
|
|
38
|
-
return null;
|
|
39
|
-
// PNG: 89 50 4E 47 0D 0A 1A 0A
|
|
40
|
-
if (b[0] === 0x89 && b[1] === 0x50 && b[2] === 0x4e && b[3] === 0x47)
|
|
41
|
-
return 'image/png';
|
|
42
|
-
// JPEG: FF D8 FF
|
|
43
|
-
if (b[0] === 0xff && b[1] === 0xd8 && b[2] === 0xff)
|
|
44
|
-
return 'image/jpeg';
|
|
45
|
-
// GIF87a / GIF89a: 47 49 46 38
|
|
46
|
-
if (b[0] === 0x47 && b[1] === 0x49 && b[2] === 0x46 && b[3] === 0x38)
|
|
47
|
-
return 'image/gif';
|
|
48
|
-
// WebP: RIFF....WEBP (bytes 0-3 and 8-11)
|
|
49
|
-
if (b.byteLength >= 12 &&
|
|
50
|
-
b[0] === 0x52 &&
|
|
51
|
-
b[1] === 0x49 &&
|
|
52
|
-
b[2] === 0x46 &&
|
|
53
|
-
b[3] === 0x46 &&
|
|
54
|
-
b[8] === 0x57 &&
|
|
55
|
-
b[9] === 0x45 &&
|
|
56
|
-
b[10] === 0x42 &&
|
|
57
|
-
b[11] === 0x50)
|
|
58
|
-
return 'image/webp';
|
|
59
|
-
// BMP: 42 4D
|
|
60
|
-
if (b[0] === 0x42 && b[1] === 0x4d)
|
|
61
|
-
return 'image/bmp';
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
64
36
|
export function isImageResourceSameOrigin(url) {
|
|
65
37
|
if (url.startsWith('data:') || url.startsWith('blob:'))
|
|
66
38
|
return true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"imageResourceFrom.js","sourceRoot":"","sources":["../src/imageResourceFrom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"imageResourceFrom.js","sourceRoot":"","sources":["../src/imageResourceFrom.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/image",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "https://github.com/flighthq/flight.git",
|
|
7
|
+
"directory": "packages/image"
|
|
8
|
+
},
|
|
4
9
|
"type": "module",
|
|
5
10
|
"main": "dist/index.js",
|
|
6
11
|
"types": "dist/index.d.ts",
|
|
@@ -27,8 +32,9 @@
|
|
|
27
32
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
28
33
|
},
|
|
29
34
|
"dependencies": {
|
|
30
|
-
"@flighthq/entity": "0.
|
|
31
|
-
"@flighthq/
|
|
35
|
+
"@flighthq/entity": "0.2.0",
|
|
36
|
+
"@flighthq/image-codec": "0.2.0",
|
|
37
|
+
"@flighthq/types": "0.2.0"
|
|
32
38
|
},
|
|
33
39
|
"devDependencies": {
|
|
34
40
|
"typescript": "^5.3.0"
|
|
@@ -2,7 +2,6 @@ import {
|
|
|
2
2
|
createImageResourceFromCanvas,
|
|
3
3
|
createImageResourceFromImageBitmap,
|
|
4
4
|
createImageResourceFromImageElement,
|
|
5
|
-
detectImageMimeType,
|
|
6
5
|
isImageResourceSameOrigin,
|
|
7
6
|
loadImageResourceFromBase64,
|
|
8
7
|
loadImageResourceFromBlob,
|
|
@@ -88,61 +87,6 @@ describe('createImageResourceFromImageElement', () => {
|
|
|
88
87
|
});
|
|
89
88
|
});
|
|
90
89
|
|
|
91
|
-
describe('detectImageMimeType', () => {
|
|
92
|
-
it('returns null for a buffer that is too small', () => {
|
|
93
|
-
expect(detectImageMimeType(new ArrayBuffer(2))).toBeNull();
|
|
94
|
-
});
|
|
95
|
-
|
|
96
|
-
it('returns null for an unrecognised header', () => {
|
|
97
|
-
const buf = new ArrayBuffer(16);
|
|
98
|
-
new Uint8Array(buf).set([0x00, 0x01, 0x02, 0x03]);
|
|
99
|
-
expect(detectImageMimeType(buf)).toBeNull();
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
it('detects PNG', () => {
|
|
103
|
-
const buf = new ArrayBuffer(16);
|
|
104
|
-
new Uint8Array(buf).set([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
|
|
105
|
-
expect(detectImageMimeType(buf)).toBe('image/png');
|
|
106
|
-
});
|
|
107
|
-
|
|
108
|
-
it('detects JPEG', () => {
|
|
109
|
-
const buf = new ArrayBuffer(16);
|
|
110
|
-
new Uint8Array(buf).set([0xff, 0xd8, 0xff, 0xe0]);
|
|
111
|
-
expect(detectImageMimeType(buf)).toBe('image/jpeg');
|
|
112
|
-
});
|
|
113
|
-
|
|
114
|
-
it('detects GIF', () => {
|
|
115
|
-
const buf = new ArrayBuffer(16);
|
|
116
|
-
new Uint8Array(buf).set([0x47, 0x49, 0x46, 0x38, 0x39, 0x61]);
|
|
117
|
-
expect(detectImageMimeType(buf)).toBe('image/gif');
|
|
118
|
-
});
|
|
119
|
-
|
|
120
|
-
it('detects WebP', () => {
|
|
121
|
-
const buf = new ArrayBuffer(16);
|
|
122
|
-
new Uint8Array(buf).set([
|
|
123
|
-
0x52,
|
|
124
|
-
0x49,
|
|
125
|
-
0x46,
|
|
126
|
-
0x46, // RIFF
|
|
127
|
-
0x00,
|
|
128
|
-
0x00,
|
|
129
|
-
0x00,
|
|
130
|
-
0x00, // size (ignored)
|
|
131
|
-
0x57,
|
|
132
|
-
0x45,
|
|
133
|
-
0x42,
|
|
134
|
-
0x50, // WEBP
|
|
135
|
-
]);
|
|
136
|
-
expect(detectImageMimeType(buf)).toBe('image/webp');
|
|
137
|
-
});
|
|
138
|
-
|
|
139
|
-
it('detects BMP', () => {
|
|
140
|
-
const buf = new ArrayBuffer(16);
|
|
141
|
-
new Uint8Array(buf).set([0x42, 0x4d]);
|
|
142
|
-
expect(detectImageMimeType(buf)).toBe('image/bmp');
|
|
143
|
-
});
|
|
144
|
-
});
|
|
145
|
-
|
|
146
90
|
describe('isImageResourceSameOrigin', () => {
|
|
147
91
|
it('returns true for data: URLs', () => {
|
|
148
92
|
expect(isImageResourceSameOrigin('data:image/png;base64,abc')).toBe(true);
|