imagescript 1.2.15 → 1.2.17

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 (53) hide show
  1. package/ImageScript.d.ts +233 -223
  2. package/ImageScript.js +1658 -1646
  3. package/LICENSE +12 -619
  4. package/LICENSE.AGPL-3.0 +619 -0
  5. package/LICENSE.MIT +19 -0
  6. package/README.md +51 -46
  7. package/bench/_.mjs +165 -165
  8. package/bench/all.mjs +3 -3
  9. package/bench/blur.mjs +58 -58
  10. package/bench/flip.mjs +62 -62
  11. package/bench/overlay.mjs +34 -34
  12. package/bench/package.json +6 -6
  13. package/bench/readme.md +63 -63
  14. package/bench/resize.mjs +51 -51
  15. package/codecs/LICENSE +20 -20
  16. package/codecs/lib.d.ts +49 -49
  17. package/codecs/lib.js +5 -5
  18. package/codecs/node/index.js +2 -2
  19. package/codecs/node/index.mjs +5 -5
  20. package/codecs/package.json +13 -13
  21. package/codecs/readme.md +37 -37
  22. package/package.json +41 -41
  23. package/png/node.js +1137 -1137
  24. package/png/src/crc.mjs +48 -48
  25. package/png/src/mem.mjs +23 -23
  26. package/png/src/png.mjs +254 -254
  27. package/png/src/zlib.mjs +617 -617
  28. package/tsconfig.json +21 -21
  29. package/utils/mem.js +25 -25
  30. package/v2/codecs/magic.js +24 -24
  31. package/v2/framebuffer.d.ts +66 -66
  32. package/v2/framebuffer.js +2352 -2352
  33. package/v2/framebuffer.mjs +125 -125
  34. package/v2/framebuffer.rs +1263 -1263
  35. package/v2/index.d.ts +83 -83
  36. package/v2/index.js +260 -260
  37. package/v2/ops/blur.mjs +302 -302
  38. package/v2/ops/color.mjs +276 -276
  39. package/v2/ops/crop.mjs +63 -63
  40. package/v2/ops/fill.mjs +32 -32
  41. package/v2/ops/flip.mjs +32 -32
  42. package/v2/ops/index.mjs +8 -8
  43. package/v2/ops/iterator.mjs +33 -33
  44. package/v2/ops/overlay.mjs +62 -62
  45. package/v2/ops/resize.mjs +165 -165
  46. package/v2/ops/rotate.mjs +116 -116
  47. package/v2/util/mem.mjs +23 -23
  48. package/wasm/node/font.js +141 -141
  49. package/wasm/node/gif.js +76 -76
  50. package/wasm/node/jpeg.js +91 -91
  51. package/wasm/node/png.js +49 -49
  52. package/wasm/node/svg.js +55 -55
  53. 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
  }