imagescript 1.2.15 → 1.2.16

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.
Files changed (51) hide show
  1. package/ImageScript.d.ts +223 -223
  2. package/ImageScript.js +1646 -1646
  3. package/LICENSE +619 -619
  4. package/README.md +46 -46
  5. package/bench/_.mjs +165 -165
  6. package/bench/all.mjs +3 -3
  7. package/bench/blur.mjs +58 -58
  8. package/bench/flip.mjs +62 -62
  9. package/bench/overlay.mjs +34 -34
  10. package/bench/package.json +6 -6
  11. package/bench/readme.md +63 -63
  12. package/bench/resize.mjs +51 -51
  13. package/codecs/LICENSE +20 -20
  14. package/codecs/lib.d.ts +49 -49
  15. package/codecs/lib.js +5 -5
  16. package/codecs/node/index.js +2 -2
  17. package/codecs/node/index.mjs +5 -5
  18. package/codecs/package.json +13 -13
  19. package/codecs/readme.md +37 -37
  20. package/package.json +41 -41
  21. package/png/node.js +1137 -1137
  22. package/png/src/crc.mjs +48 -48
  23. package/png/src/mem.mjs +23 -23
  24. package/png/src/png.mjs +254 -254
  25. package/png/src/zlib.mjs +617 -617
  26. package/tsconfig.json +21 -21
  27. package/utils/mem.js +25 -25
  28. package/v2/codecs/magic.js +24 -24
  29. package/v2/framebuffer.d.ts +66 -66
  30. package/v2/framebuffer.js +2352 -2352
  31. package/v2/framebuffer.mjs +125 -125
  32. package/v2/framebuffer.rs +1263 -1263
  33. package/v2/index.d.ts +83 -83
  34. package/v2/index.js +260 -260
  35. package/v2/ops/blur.mjs +302 -302
  36. package/v2/ops/color.mjs +276 -276
  37. package/v2/ops/crop.mjs +63 -63
  38. package/v2/ops/fill.mjs +32 -32
  39. package/v2/ops/flip.mjs +32 -32
  40. package/v2/ops/index.mjs +8 -8
  41. package/v2/ops/iterator.mjs +33 -33
  42. package/v2/ops/overlay.mjs +62 -62
  43. package/v2/ops/resize.mjs +165 -165
  44. package/v2/ops/rotate.mjs +116 -116
  45. package/v2/util/mem.mjs +23 -23
  46. package/wasm/node/font.js +141 -141
  47. package/wasm/node/gif.js +76 -76
  48. package/wasm/node/jpeg.js +91 -91
  49. package/wasm/node/png.js +49 -49
  50. package/wasm/node/svg.js +55 -55
  51. package/wasm/node/tiff.js +46 -46
package/tsconfig.json CHANGED
@@ -1,21 +1,21 @@
1
- {
2
- "compilerOptions": {
3
- "target": "es6",
4
- "module": "commonjs",
5
- "strict": true,
6
- "noImplicitAny": true,
7
- "strictNullChecks": true,
8
- "noImplicitThis": true,
9
- "alwaysStrict": true,
10
- "noUnusedLocals": true,
11
- "noUnusedParameters": true,
12
- "noImplicitReturns": true,
13
- "noFallthroughCasesInSwitch": true,
14
- "moduleResolution": "node",
15
- "allowJs": true,
16
- "allowSyntheticDefaultImports": true,
17
- "skipLibCheck": true,
18
- "lib": ["es6"]
19
- },
20
- "files": ["ImageScript.d.ts"]
21
- }
1
+ {
2
+ "compilerOptions": {
3
+ "target": "es6",
4
+ "module": "commonjs",
5
+ "strict": true,
6
+ "noImplicitAny": true,
7
+ "strictNullChecks": true,
8
+ "noImplicitThis": true,
9
+ "alwaysStrict": true,
10
+ "noUnusedLocals": true,
11
+ "noUnusedParameters": true,
12
+ "noImplicitReturns": true,
13
+ "noFallthroughCasesInSwitch": true,
14
+ "moduleResolution": "node",
15
+ "allowJs": true,
16
+ "allowSyntheticDefaultImports": true,
17
+ "skipLibCheck": true,
18
+ "lib": ["es6"]
19
+ },
20
+ "files": ["ImageScript.d.ts"]
21
+ }
package/utils/mem.js CHANGED
@@ -1,26 +1,26 @@
1
- function view(buffer, shared = false) {
2
- if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);
3
- if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);
4
- if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);
5
-
6
- throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'");
7
- }
8
-
9
- function from_parts(buffers, shared = false) {
10
- let length = 0;
11
- let offset = 0;
12
- buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));
13
-
14
- const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);
15
-
16
- buffers.forEach(buffer => {
17
- const ref = Array.isArray(buffer) ? buffer : view(buffer, true);
18
-
19
- u8.set(ref, offset);
20
- offset += ref.length;
21
- });
22
-
23
- return u8;
24
- }
25
-
1
+ function view(buffer, shared = false) {
2
+ if (buffer instanceof ArrayBuffer) return new Uint8Array(buffer);
3
+ if (shared && buffer instanceof SharedArrayBuffer) return new Uint8Array(buffer);
4
+ if (ArrayBuffer.isView(buffer)) return new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);
5
+
6
+ throw new TypeError("The provided value is not of type '(ArrayBuffer or ArrayBufferView)'");
7
+ }
8
+
9
+ function from_parts(buffers, shared = false) {
10
+ let length = 0;
11
+ let offset = 0;
12
+ buffers.forEach(buffer => length += (null == buffer.byteLength ? buffer.length : buffer.byteLength));
13
+
14
+ const u8 = new Uint8Array(shared ? new SharedArrayBuffer(length) : length);
15
+
16
+ buffers.forEach(buffer => {
17
+ const ref = Array.isArray(buffer) ? buffer : view(buffer, true);
18
+
19
+ u8.set(ref, offset);
20
+ offset += ref.length;
21
+ });
22
+
23
+ return u8;
24
+ }
25
+
26
26
  module.exports = { view, from_parts };
@@ -1,25 +1,25 @@
1
- const { view } = require('../util/mem.js');
2
-
3
- const formats = {
4
- ttf: { type: 'font', format: 'ttf' },
5
- otf: { type: 'font', format: 'otf' },
6
- svg: { type: 'image', format: 'svg' },
7
- png: { type: 'image', format: 'png' },
8
- gif: { type: 'image', format: 'gif' },
9
- jpeg: { type: 'image', format: 'jpeg' },
10
- tiff: { type: 'image', format: 'tiff' },
11
- };
12
-
13
- function buffer(init) {
14
- const u8 = view(init);
15
- if (0 === u8.length) return;
16
- if (0xff === u8[0] && 0xd8 === u8[1] && 0xff === u8[2]) return formats.jpeg;
17
- if (0x4d === u8[0] && 0x4d === u8[1] && 0x00 === u8[2] && 0x2a === u8[3]) return formats.tiff;
18
- if (0x49 === u8[0] && 0x49 === u8[1] && 0x2a === u8[2] && 0x00 === u8[3]) return formats.tiff;
19
- if (0x00 === u8[0] && 0x01 === u8[1] && 0x00 === u8[2] && 0x00 === u8[3] && 0x00 === u8[4]) return formats.ttf;
20
- if (0x4F === u8[0] && 0x54 === u8[1] && 0x54 === u8[2] && 0x4F === u8[3] && 0x00 === u8[4]) return formats.otf;
21
- if (0x47 === u8[0] && 0x49 === u8[1] && 0x46 === u8[2] && 0x38 === u8[3] && 0x61 === u8[5] && (0x37 === u8[4] || 0x39 === u8[4])) return formats.gif;
22
- if (0x89 === u8[0] && 0x50 === u8[1] && 0x4e === u8[2] && 0x47 === u8[3] && 0x0d === u8[4] && 0x0a === u8[5] && 0x1a === u8[6] && 0x0a === u8[7]) return formats.png;
23
- }
24
-
1
+ const { view } = require('../util/mem.js');
2
+
3
+ const formats = {
4
+ ttf: { type: 'font', format: 'ttf' },
5
+ otf: { type: 'font', format: 'otf' },
6
+ svg: { type: 'image', format: 'svg' },
7
+ png: { type: 'image', format: 'png' },
8
+ gif: { type: 'image', format: 'gif' },
9
+ jpeg: { type: 'image', format: 'jpeg' },
10
+ tiff: { type: 'image', format: 'tiff' },
11
+ };
12
+
13
+ function buffer(init) {
14
+ const u8 = view(init);
15
+ if (0 === u8.length) return;
16
+ if (0xff === u8[0] && 0xd8 === u8[1] && 0xff === u8[2]) return formats.jpeg;
17
+ if (0x4d === u8[0] && 0x4d === u8[1] && 0x00 === u8[2] && 0x2a === u8[3]) return formats.tiff;
18
+ if (0x49 === u8[0] && 0x49 === u8[1] && 0x2a === u8[2] && 0x00 === u8[3]) return formats.tiff;
19
+ if (0x00 === u8[0] && 0x01 === u8[1] && 0x00 === u8[2] && 0x00 === u8[3] && 0x00 === u8[4]) return formats.ttf;
20
+ if (0x4F === u8[0] && 0x54 === u8[1] && 0x54 === u8[2] && 0x4F === u8[3] && 0x00 === u8[4]) return formats.otf;
21
+ if (0x47 === u8[0] && 0x49 === u8[1] && 0x46 === u8[2] && 0x38 === u8[3] && 0x61 === u8[5] && (0x37 === u8[4] || 0x39 === u8[4])) return formats.gif;
22
+ if (0x89 === u8[0] && 0x50 === u8[1] && 0x4e === u8[2] && 0x47 === u8[3] && 0x0d === u8[4] && 0x0a === u8[5] && 0x1a === u8[6] && 0x0a === u8[7]) return formats.png;
23
+ }
24
+
25
25
  module.exports = { buffer };
@@ -1,67 +1,67 @@
1
- type rgb = [r: number, g: number, b: number];
2
- type rgba = [r: number, g: number, b: number, a: number];
3
-
4
- export class Color {
5
- private value: number;
6
-
7
- constructor(color: string);
8
- static rgb(r: number, g: number, b: number): number;
9
- static rgba(r: number, g: number, b: number, a: number): number;
10
- static hsla(h: number, s: number, l: number, a: number): number;
11
-
12
- get rgb(): rgb;
13
- toJSON(): number;
14
- get rgba(): rgba;
15
- valueOf(): number;
16
- get name(): null | string;
17
- toString(radix?: '16' | 'hex' | 'rgb' | 'rgba'): string;
18
- }
19
-
20
- export default class framebuffer {
21
- readonly width: number;
22
- readonly u8: Uint8Array;
23
- readonly height: number;
24
- readonly u32: Uint32Array;
25
- private readonly view: DataView;
26
-
27
- constructor(width: number, height: number, buffer?: BufferSource);
28
- static from(framebuffer: { width: number, height: number, u8?: BufferSource, buffer?: BufferSource }): framebuffer;
29
-
30
- toString(): string;
31
- clone(): framebuffer;
32
- get(x: number, y: number): number;
33
- at(x: number, y: number): Uint8Array;
34
- flip(type: 'vertical' | 'horizontal'): this;
35
- rotate(deg: number, resize?: boolean): this;
36
- set(x: number, y: number, color: number): void;
37
- overlay(frame: this, x?: number, y?: number): this;
38
- replace(frame: this, x?: number, y?: number): this;
39
- toJSON(): { width: number, height: number, buffer: number[] };
40
- static decode(format: 'png', buffer: BufferSource): framebuffer;
41
- scale(type: 'cubic' | 'linear' | 'nearest', factor: number): this;
42
- [Symbol.iterator](): Generator<[x: number, y: number], [x: number, y: number]>;
43
- resize(type: 'cubic' | 'linear' | 'nearest', width: number, height: number): this;
44
- encode(format: 'png', options?: { compression?: 'none' | 'fast' | 'best' | 'default' }): Uint8Array;
45
-
46
- cut(type: 'circle', feathering?: number): this;
47
- cut(type: 'box', x: number, y: number, width: number, height: number): this;
48
-
49
- crop(type: 'circle', feathering?: number): this;
50
- crop(type: 'box', x: number, y: number, width: number, height: number): this;
51
-
52
- blur(type: 'cubic'): this;
53
- blur(type: 'box', radius: number): this;
54
- blur(type: 'gaussian', radius: number): this;
55
-
56
- swap(old: rgba, color: rgba): this;
57
- swap(old: Color, color: Color): this;
58
- swap(old: number, color: number): this;
59
-
60
- fill(rgba: rgba): this;
61
- fill(color: Color): this;
62
- fill(color: number): this;
63
- fill(cb: (x: number, y: number) => number): this;
64
-
65
- pixels(type?: 'int'): Generator<[x: number, y: number, color: number], [x: number, y: number, color: number]>;
66
- pixels(type: 'rgba'): Generator<[x: number, y: number, rgba: Uint8Array], [x: number, y: number, rgba: Uint8Array]>;
1
+ type rgb = [r: number, g: number, b: number];
2
+ type rgba = [r: number, g: number, b: number, a: number];
3
+
4
+ export class Color {
5
+ private value: number;
6
+
7
+ constructor(color: string);
8
+ static rgb(r: number, g: number, b: number): number;
9
+ static rgba(r: number, g: number, b: number, a: number): number;
10
+ static hsla(h: number, s: number, l: number, a: number): number;
11
+
12
+ get rgb(): rgb;
13
+ toJSON(): number;
14
+ get rgba(): rgba;
15
+ valueOf(): number;
16
+ get name(): null | string;
17
+ toString(radix?: '16' | 'hex' | 'rgb' | 'rgba'): string;
18
+ }
19
+
20
+ export default class framebuffer {
21
+ readonly width: number;
22
+ readonly u8: Uint8Array;
23
+ readonly height: number;
24
+ readonly u32: Uint32Array;
25
+ private readonly view: DataView;
26
+
27
+ constructor(width: number, height: number, buffer?: BufferSource);
28
+ static from(framebuffer: { width: number, height: number, u8?: BufferSource, buffer?: BufferSource }): framebuffer;
29
+
30
+ toString(): string;
31
+ clone(): framebuffer;
32
+ get(x: number, y: number): number;
33
+ at(x: number, y: number): Uint8Array;
34
+ flip(type: 'vertical' | 'horizontal'): this;
35
+ rotate(deg: number, resize?: boolean): this;
36
+ set(x: number, y: number, color: number): void;
37
+ overlay(frame: this, x?: number, y?: number): this;
38
+ replace(frame: this, x?: number, y?: number): this;
39
+ toJSON(): { width: number, height: number, buffer: number[] };
40
+ static decode(format: 'png', buffer: BufferSource): framebuffer;
41
+ scale(type: 'cubic' | 'linear' | 'nearest', factor: number): this;
42
+ [Symbol.iterator](): Generator<[x: number, y: number], [x: number, y: number]>;
43
+ resize(type: 'cubic' | 'linear' | 'nearest', width: number, height: number): this;
44
+ encode(format: 'png', options?: { compression?: 'none' | 'fast' | 'best' | 'default' }): Uint8Array;
45
+
46
+ cut(type: 'circle', feathering?: number): this;
47
+ cut(type: 'box', x: number, y: number, width: number, height: number): this;
48
+
49
+ crop(type: 'circle', feathering?: number): this;
50
+ crop(type: 'box', x: number, y: number, width: number, height: number): this;
51
+
52
+ blur(type: 'cubic'): this;
53
+ blur(type: 'box', radius: number): this;
54
+ blur(type: 'gaussian', radius: number): this;
55
+
56
+ swap(old: rgba, color: rgba): this;
57
+ swap(old: Color, color: Color): this;
58
+ swap(old: number, color: number): this;
59
+
60
+ fill(rgba: rgba): this;
61
+ fill(color: Color): this;
62
+ fill(color: number): this;
63
+ fill(cb: (x: number, y: number) => number): this;
64
+
65
+ pixels(type?: 'int'): Generator<[x: number, y: number, color: number], [x: number, y: number, color: number]>;
66
+ pixels(type: 'rgba'): Generator<[x: number, y: number, rgba: Uint8Array], [x: number, y: number, rgba: Uint8Array]>;
67
67
  }