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.
- package/ImageScript.d.ts +233 -223
- package/ImageScript.js +1658 -1646
- package/LICENSE +12 -619
- package/LICENSE.AGPL-3.0 +619 -0
- package/LICENSE.MIT +19 -0
- package/README.md +51 -46
- package/bench/_.mjs +165 -165
- package/bench/all.mjs +3 -3
- package/bench/blur.mjs +58 -58
- package/bench/flip.mjs +62 -62
- package/bench/overlay.mjs +34 -34
- package/bench/package.json +6 -6
- package/bench/readme.md +63 -63
- package/bench/resize.mjs +51 -51
- package/codecs/LICENSE +20 -20
- package/codecs/lib.d.ts +49 -49
- package/codecs/lib.js +5 -5
- package/codecs/node/index.js +2 -2
- package/codecs/node/index.mjs +5 -5
- package/codecs/package.json +13 -13
- package/codecs/readme.md +37 -37
- package/package.json +41 -41
- package/png/node.js +1137 -1137
- package/png/src/crc.mjs +48 -48
- package/png/src/mem.mjs +23 -23
- package/png/src/png.mjs +254 -254
- package/png/src/zlib.mjs +617 -617
- package/tsconfig.json +21 -21
- package/utils/mem.js +25 -25
- package/v2/codecs/magic.js +24 -24
- package/v2/framebuffer.d.ts +66 -66
- package/v2/framebuffer.js +2352 -2352
- package/v2/framebuffer.mjs +125 -125
- package/v2/framebuffer.rs +1263 -1263
- package/v2/index.d.ts +83 -83
- package/v2/index.js +260 -260
- package/v2/ops/blur.mjs +302 -302
- package/v2/ops/color.mjs +276 -276
- package/v2/ops/crop.mjs +63 -63
- package/v2/ops/fill.mjs +32 -32
- package/v2/ops/flip.mjs +32 -32
- package/v2/ops/index.mjs +8 -8
- package/v2/ops/iterator.mjs +33 -33
- package/v2/ops/overlay.mjs +62 -62
- package/v2/ops/resize.mjs +165 -165
- package/v2/ops/rotate.mjs +116 -116
- package/v2/util/mem.mjs +23 -23
- package/wasm/node/font.js +141 -141
- package/wasm/node/gif.js +76 -76
- package/wasm/node/jpeg.js +91 -91
- package/wasm/node/png.js +49 -49
- package/wasm/node/svg.js +55 -55
- 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 };
|
package/v2/codecs/magic.js
CHANGED
|
@@ -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 };
|
package/v2/framebuffer.d.ts
CHANGED
|
@@ -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
|
}
|