@livechart/sharp-vibrant 0.1.0 → 0.2.1
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/.eslintcache +1 -1
- package/.vscode/settings.json +1 -1
- package/README.md +22 -9
- package/fixtures/sample/images/palettes.json +16 -0
- package/fixtures/sample/types.ts +8 -4
- package/lib/builder.d.ts +2 -4
- package/lib/builder.js +31 -41
- package/lib/builder.js.map +1 -1
- package/lib/color.d.ts +1 -1
- package/lib/color.js +46 -51
- package/lib/color.js.map +1 -1
- package/lib/filter/default.js +1 -4
- package/lib/filter/default.js.map +1 -1
- package/lib/filter/index.js +2 -6
- package/lib/filter/index.js.map +1 -1
- package/lib/generator/default.js +12 -14
- package/lib/generator/default.js.map +1 -1
- package/lib/generator/index.js +2 -7
- package/lib/generator/index.js.map +1 -1
- package/lib/image/base.d.ts +2 -0
- package/lib/image/base.js +1 -3
- package/lib/image/base.js.map +1 -1
- package/lib/image/sharp.d.ts +2 -0
- package/lib/image/sharp.js +35 -28
- package/lib/image/sharp.js.map +1 -1
- package/lib/index.d.ts +1 -1
- package/lib/index.js +4 -8
- package/lib/index.js.map +1 -1
- package/lib/quantizer/index.js +2 -7
- package/lib/quantizer/index.js.map +1 -1
- package/lib/quantizer/mmcq.js +8 -13
- package/lib/quantizer/mmcq.js.map +1 -1
- package/lib/quantizer/pqueue.js +23 -27
- package/lib/quantizer/pqueue.js.map +1 -1
- package/lib/quantizer/vbox.js +51 -55
- package/lib/quantizer/vbox.js.map +1 -1
- package/lib/src/builder.d.ts +17 -0
- package/lib/src/builder.js +80 -0
- package/lib/src/builder.js.map +1 -0
- package/lib/src/color.d.ts +30 -0
- package/lib/src/color.js +81 -0
- package/lib/src/color.js.map +1 -0
- package/lib/src/filter/default.d.ts +1 -0
- package/lib/src/filter/default.js +7 -0
- package/lib/src/filter/default.js.map +1 -0
- package/lib/src/filter/index.d.ts +3 -0
- package/lib/src/filter/index.js +24 -0
- package/lib/src/filter/index.js.map +1 -0
- package/lib/src/generator/default.d.ts +20 -0
- package/lib/src/generator/default.js +143 -0
- package/lib/src/generator/default.js.map +1 -0
- package/lib/src/generator/index.d.ts +3 -0
- package/lib/src/generator/index.js +9 -0
- package/lib/src/generator/index.js.map +1 -0
- package/lib/src/image/base.d.ts +11 -0
- package/lib/src/image/base.js +29 -0
- package/lib/src/image/base.js.map +1 -0
- package/lib/src/image/sharp.d.ts +11 -0
- package/lib/src/image/sharp.js +81 -0
- package/lib/src/image/sharp.js.map +1 -0
- package/lib/src/index.d.ts +2 -0
- package/lib/src/index.js +9 -0
- package/lib/src/index.js.map +1 -0
- package/lib/src/quantizer/index.d.ts +2 -0
- package/lib/src/quantizer/index.js +8 -0
- package/lib/src/quantizer/index.js.map +1 -0
- package/lib/src/quantizer/mmcq.d.ts +3 -0
- package/lib/src/quantizer/mmcq.js +57 -0
- package/lib/src/quantizer/mmcq.js.map +1 -0
- package/lib/src/quantizer/pqueue.d.ts +14 -0
- package/lib/src/quantizer/pqueue.js +51 -0
- package/lib/src/quantizer/pqueue.js.map +1 -0
- package/lib/src/quantizer/vbox.d.ts +26 -0
- package/lib/src/quantizer/vbox.js +253 -0
- package/lib/src/quantizer/vbox.js.map +1 -0
- package/lib/src/typing.d.ts +57 -0
- package/lib/src/typing.js +3 -0
- package/lib/src/typing.js.map +1 -0
- package/lib/src/util.d.ts +31 -0
- package/lib/src/util.js +201 -0
- package/lib/src/util.js.map +1 -0
- package/lib/src/vibrant.d.ts +21 -0
- package/lib/src/vibrant.js +117 -0
- package/lib/src/vibrant.js.map +1 -0
- package/lib/typing.d.ts +18 -10
- package/lib/typing.js +1 -2
- package/lib/util.js +22 -37
- package/lib/util.js.map +1 -1
- package/lib/vibrant.d.ts +3 -4
- package/lib/vibrant.js +42 -52
- package/lib/vibrant.js.map +1 -1
- package/package.json +8 -8
- package/src/builder.ts +2 -6
- package/src/image/base.ts +4 -0
- package/src/image/sharp.ts +18 -3
- package/src/index.ts +1 -1
- package/src/test/common/data.ts +3 -1
- package/src/test/common/helper.ts +41 -21
- package/src/test/vibrant.spec.ts +4 -2
- package/src/typing.ts +19 -7
- package/src/vibrant.ts +16 -10
- package/tsconfig.json +4 -14
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
36
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
37
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
38
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
39
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
40
|
+
};
|
|
41
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
42
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
43
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
44
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
45
|
+
};
|
|
46
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
47
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
48
|
+
};
|
|
49
|
+
var _Vibrant_src;
|
|
50
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
51
|
+
const color_1 = require("./color");
|
|
52
|
+
// eslint-disable-next-line import/no-cycle
|
|
53
|
+
const builder_1 = __importDefault(require("./builder"));
|
|
54
|
+
const Util = __importStar(require("./util"));
|
|
55
|
+
const quantizer_1 = __importDefault(require("./quantizer"));
|
|
56
|
+
const generator_1 = require("./generator");
|
|
57
|
+
// eslint-disable-next-line import/no-cycle
|
|
58
|
+
const Filters = __importStar(require("./filter"));
|
|
59
|
+
class Vibrant {
|
|
60
|
+
static from(src) {
|
|
61
|
+
return new builder_1.default(src);
|
|
62
|
+
}
|
|
63
|
+
constructor(src, opts) {
|
|
64
|
+
_Vibrant_src.set(this, void 0);
|
|
65
|
+
__classPrivateFieldSet(this, _Vibrant_src, src, "f");
|
|
66
|
+
this.opts = (Object.assign(Object.assign({}, Vibrant.DefaultOpts), opts));
|
|
67
|
+
this.opts.combinedFilter = Filters.combineFilters(this.opts.filters);
|
|
68
|
+
}
|
|
69
|
+
process(image) {
|
|
70
|
+
const { quantizer, generator } = this.opts;
|
|
71
|
+
return image.applyFilter(this.opts.combinedFilter)
|
|
72
|
+
.then((imageData) => quantizer(imageData.data, this.opts))
|
|
73
|
+
.then((colors) => color_1.Swatch.applyFilter(colors, this.opts.combinedFilter))
|
|
74
|
+
.then((colors) => Promise.resolve(generator(colors)));
|
|
75
|
+
}
|
|
76
|
+
getPalette(cb) {
|
|
77
|
+
const image = new this.opts.ImageClass();
|
|
78
|
+
const result = image.load(__classPrivateFieldGet(this, _Vibrant_src, "f"), this.opts)
|
|
79
|
+
.then((loadedImage) => this.process(loadedImage))
|
|
80
|
+
.then((palette) => {
|
|
81
|
+
const paletteResult = {
|
|
82
|
+
pixelCount: image.pixelCount,
|
|
83
|
+
imageDimensions: {
|
|
84
|
+
width: image.width,
|
|
85
|
+
height: image.height,
|
|
86
|
+
},
|
|
87
|
+
palette,
|
|
88
|
+
};
|
|
89
|
+
image.cleanup();
|
|
90
|
+
return paletteResult;
|
|
91
|
+
}, (err) => {
|
|
92
|
+
image.cleanup();
|
|
93
|
+
throw err;
|
|
94
|
+
});
|
|
95
|
+
if (cb) {
|
|
96
|
+
result.then((palette) => cb(null, palette), (err) => cb(err));
|
|
97
|
+
}
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
_Vibrant_src = new WeakMap();
|
|
102
|
+
Vibrant.Builder = builder_1.default;
|
|
103
|
+
Vibrant.Quantizer = quantizer_1.default;
|
|
104
|
+
Vibrant.Generator = generator_1.Default;
|
|
105
|
+
Vibrant.Filter = Filters;
|
|
106
|
+
Vibrant.Util = Util;
|
|
107
|
+
Vibrant.Swatch = color_1.Swatch;
|
|
108
|
+
Vibrant.DefaultOpts = {
|
|
109
|
+
colorCount: 64,
|
|
110
|
+
quality: 5,
|
|
111
|
+
generator: generator_1.Default,
|
|
112
|
+
ImageClass: null,
|
|
113
|
+
quantizer: quantizer_1.default,
|
|
114
|
+
filters: [Filters.Default],
|
|
115
|
+
};
|
|
116
|
+
exports.default = Vibrant;
|
|
117
|
+
//# sourceMappingURL=vibrant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vibrant.js","sourceRoot":"","sources":["../../src/vibrant.ts"],"names":[],"mappings":"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"}
|
package/lib/typing.d.ts
CHANGED
|
@@ -1,28 +1,36 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
1
|
import type { Palette, Swatch } from './color';
|
|
3
2
|
import type Builder from './builder';
|
|
3
|
+
import { type Sharp } from 'sharp';
|
|
4
4
|
export interface VibrantStatic {
|
|
5
5
|
from(src: ImageSource): Builder;
|
|
6
6
|
}
|
|
7
7
|
export interface Callback<T> {
|
|
8
8
|
(err?: Error, result?: T): void;
|
|
9
9
|
}
|
|
10
|
-
export
|
|
11
|
-
export
|
|
12
|
-
export
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
width: number;
|
|
16
|
-
height: number;
|
|
10
|
+
export type ImageCallback = Callback<Image>;
|
|
11
|
+
export type ImageSource = string | Buffer | Sharp;
|
|
12
|
+
export interface ImageDimensions {
|
|
13
|
+
readonly width: number;
|
|
14
|
+
readonly height: number;
|
|
17
15
|
}
|
|
18
|
-
export interface
|
|
16
|
+
export interface ImagePixelInfo {
|
|
19
17
|
readonly pixelCount: number;
|
|
18
|
+
}
|
|
19
|
+
export type Pixels = Uint8ClampedArray | Buffer;
|
|
20
|
+
export interface ImageData extends ImageDimensions {
|
|
21
|
+
data: Pixels;
|
|
22
|
+
}
|
|
23
|
+
export interface PaletteResult extends ImagePixelInfo {
|
|
24
|
+
readonly imageDimensions: ImageDimensions;
|
|
25
|
+
readonly palette: Palette;
|
|
26
|
+
}
|
|
27
|
+
export interface Image extends ImageDimensions, ImagePixelInfo {
|
|
20
28
|
readonly imageData: ImageData;
|
|
21
29
|
load(image: ImageSource, opts: ComputedOptions): Promise<Image>;
|
|
22
30
|
applyFilter(filter: Filter): Promise<ImageData>;
|
|
23
31
|
cleanup(): void;
|
|
24
32
|
}
|
|
25
|
-
export
|
|
33
|
+
export type Resolvable<T> = T | Promise<T>;
|
|
26
34
|
export interface ImageClass {
|
|
27
35
|
new (): Image;
|
|
28
36
|
}
|
package/lib/typing.js
CHANGED
package/lib/util.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DELTAE94_DIFF_STATUS = {
|
|
1
|
+
export const DELTAE94_DIFF_STATUS = {
|
|
4
2
|
NA: 0,
|
|
5
3
|
PERFECT: 1,
|
|
6
4
|
CLOSE: 2,
|
|
7
5
|
GOOD: 10,
|
|
8
6
|
SIMILAR: 50,
|
|
9
7
|
};
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
function defer() {
|
|
8
|
+
export const SIGBITS = 5;
|
|
9
|
+
export const RSHIFT = 8 - SIGBITS;
|
|
10
|
+
export function defer() {
|
|
13
11
|
let resolve;
|
|
14
12
|
let reject;
|
|
15
13
|
const promise = new Promise((_resolve, _reject) => {
|
|
@@ -19,18 +17,15 @@ function defer() {
|
|
|
19
17
|
// @ts-ignore
|
|
20
18
|
return { resolve, reject, promise };
|
|
21
19
|
}
|
|
22
|
-
|
|
23
|
-
function hexToRgb(hex) {
|
|
20
|
+
export function hexToRgb(hex) {
|
|
24
21
|
const m = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
|
|
25
22
|
return m === null ? null : [m[1], m[2], m[3]].map((s) => parseInt(s, 16));
|
|
26
23
|
}
|
|
27
|
-
|
|
28
|
-
function rgbToHex(r, g, b) {
|
|
24
|
+
export function rgbToHex(r, g, b) {
|
|
29
25
|
return `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1, 7)}`;
|
|
30
26
|
}
|
|
31
|
-
exports.rgbToHex = rgbToHex;
|
|
32
27
|
// ir/ig/ib = (input)r/g/b - done for the purpose of linting.
|
|
33
|
-
function rgbToHsl(ir, ig, ib) {
|
|
28
|
+
export function rgbToHsl(ir, ig, ib) {
|
|
34
29
|
const r = ir / 255;
|
|
35
30
|
const g = ig / 255;
|
|
36
31
|
const b = ib / 255;
|
|
@@ -59,7 +54,6 @@ function rgbToHsl(ir, ig, ib) {
|
|
|
59
54
|
}
|
|
60
55
|
return [h, s, l];
|
|
61
56
|
}
|
|
62
|
-
exports.rgbToHsl = rgbToHsl;
|
|
63
57
|
// it = (input)t
|
|
64
58
|
function hue2rgb(p, q, it) {
|
|
65
59
|
let t = it;
|
|
@@ -75,7 +69,7 @@ function hue2rgb(p, q, it) {
|
|
|
75
69
|
return p + (q - p) * (2 / 3 - t) * 6;
|
|
76
70
|
return p;
|
|
77
71
|
}
|
|
78
|
-
function hslToRgb(h, s, l) {
|
|
72
|
+
export function hslToRgb(h, s, l) {
|
|
79
73
|
let r = l;
|
|
80
74
|
let g = l;
|
|
81
75
|
let b = l;
|
|
@@ -93,9 +87,8 @@ function hslToRgb(h, s, l) {
|
|
|
93
87
|
b * 255 | 0,
|
|
94
88
|
];
|
|
95
89
|
}
|
|
96
|
-
exports.hslToRgb = hslToRgb;
|
|
97
90
|
// ir/ig/ib = (input)r/g/b - done for the purpose of linting.
|
|
98
|
-
function rgbToXyz(ir, ig, ib) {
|
|
91
|
+
export function rgbToXyz(ir, ig, ib) {
|
|
99
92
|
let r = ir / 255;
|
|
100
93
|
let g = ig / 255;
|
|
101
94
|
let b = ib / 255;
|
|
@@ -110,9 +103,8 @@ function rgbToXyz(ir, ig, ib) {
|
|
|
110
103
|
const z = r * 0.0193 + g * 0.1192 + b * 0.9505;
|
|
111
104
|
return [x, y, z];
|
|
112
105
|
}
|
|
113
|
-
exports.rgbToXyz = rgbToXyz;
|
|
114
106
|
// ix/iy/iz = (input)x/y/z
|
|
115
|
-
function xyzToCIELab(ix, iy, iz) {
|
|
107
|
+
export function xyzToCIELab(ix, iy, iz) {
|
|
116
108
|
const REF_X = 95.047;
|
|
117
109
|
const REF_Y = 100;
|
|
118
110
|
const REF_Z = 108.883;
|
|
@@ -127,13 +119,11 @@ function xyzToCIELab(ix, iy, iz) {
|
|
|
127
119
|
const b = 200 * (y - z);
|
|
128
120
|
return [L, a, b];
|
|
129
121
|
}
|
|
130
|
-
|
|
131
|
-
function rgbToCIELab(r, g, b) {
|
|
122
|
+
export function rgbToCIELab(r, g, b) {
|
|
132
123
|
const [x, y, z] = rgbToXyz(r, g, b);
|
|
133
124
|
return xyzToCIELab(x, y, z);
|
|
134
125
|
}
|
|
135
|
-
|
|
136
|
-
function deltaE94(lab1, lab2) {
|
|
126
|
+
export function deltaE94(lab1, lab2) {
|
|
137
127
|
const WEIGHT_L = 1;
|
|
138
128
|
const WEIGHT_C = 1;
|
|
139
129
|
const WEIGHT_H = 1;
|
|
@@ -157,44 +147,39 @@ function deltaE94(lab1, lab2) {
|
|
|
157
147
|
xDH /= WEIGHT_H * xSH;
|
|
158
148
|
return Math.sqrt(xDL * xDL + xDC * xDC + xDH * xDH);
|
|
159
149
|
}
|
|
160
|
-
|
|
161
|
-
function rgbDiff(rgb1, rgb2) {
|
|
150
|
+
export function rgbDiff(rgb1, rgb2) {
|
|
162
151
|
const lab1 = rgbToCIELab(...rgb1);
|
|
163
152
|
const lab2 = rgbToCIELab(...rgb2);
|
|
164
153
|
return deltaE94(lab1, lab2);
|
|
165
154
|
}
|
|
166
|
-
|
|
167
|
-
function hexDiff(hex1, hex2) {
|
|
155
|
+
export function hexDiff(hex1, hex2) {
|
|
168
156
|
const rgb1 = hexToRgb(hex1);
|
|
169
157
|
const rgb2 = hexToRgb(hex2);
|
|
170
158
|
return rgbDiff(rgb1, rgb2);
|
|
171
159
|
}
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
if (d < exports.DELTAE94_DIFF_STATUS.NA) {
|
|
160
|
+
export function getColorDiffStatus(d) {
|
|
161
|
+
if (d < DELTAE94_DIFF_STATUS.NA) {
|
|
175
162
|
return 'N/A';
|
|
176
163
|
}
|
|
177
164
|
// Not perceptible by human eyes
|
|
178
|
-
if (d <=
|
|
165
|
+
if (d <= DELTAE94_DIFF_STATUS.PERFECT) {
|
|
179
166
|
return 'Perfect';
|
|
180
167
|
}
|
|
181
168
|
// Perceptible through close observation
|
|
182
|
-
if (d <=
|
|
169
|
+
if (d <= DELTAE94_DIFF_STATUS.CLOSE) {
|
|
183
170
|
return 'Close';
|
|
184
171
|
}
|
|
185
172
|
// Perceptible at a glance
|
|
186
|
-
if (d <=
|
|
173
|
+
if (d <= DELTAE94_DIFF_STATUS.GOOD) {
|
|
187
174
|
return 'Good';
|
|
188
175
|
}
|
|
189
176
|
// Colors are more similar than opposite
|
|
190
|
-
if (d <
|
|
177
|
+
if (d < DELTAE94_DIFF_STATUS.SIMILAR) {
|
|
191
178
|
return 'Similar';
|
|
192
179
|
}
|
|
193
180
|
return 'Wrong';
|
|
194
181
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
return (r << (2 * exports.SIGBITS)) + (g << exports.SIGBITS) + b;
|
|
182
|
+
export function getColorIndex(r, g, b) {
|
|
183
|
+
return (r << (2 * SIGBITS)) + (g << SIGBITS) + b;
|
|
198
184
|
}
|
|
199
|
-
exports.getColorIndex = getColorIndex;
|
|
200
185
|
//# sourceMappingURL=util.js.map
|
package/lib/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../src/util.ts"],"names":[],"mappings":"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"}
|
package/lib/vibrant.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { ImageSource, Options, ComputedOptions, Callback } from './typing';
|
|
2
|
-
import {
|
|
1
|
+
import type { ImageSource, Options, ComputedOptions, Callback, PaletteResult } from './typing';
|
|
2
|
+
import { Swatch } from './color';
|
|
3
3
|
import Builder from './builder';
|
|
4
4
|
import * as Util from './util';
|
|
5
5
|
import * as Filters from './filter';
|
|
@@ -16,7 +16,6 @@ declare class Vibrant {
|
|
|
16
16
|
opts: ComputedOptions;
|
|
17
17
|
constructor(src: ImageSource, opts?: Partial<Options>);
|
|
18
18
|
private process;
|
|
19
|
-
|
|
20
|
-
getPalette(cb?: Callback<Palette>): Promise<Palette>;
|
|
19
|
+
getPalette(cb?: Callback<PaletteResult>): Promise<PaletteResult>;
|
|
21
20
|
}
|
|
22
21
|
export default Vibrant;
|
package/lib/vibrant.js
CHANGED
|
@@ -1,89 +1,79 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
if (!
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
privateMap.set(receiver, value);
|
|
7
|
-
return value;
|
|
8
|
-
};
|
|
9
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, privateMap) {
|
|
10
|
-
if (!privateMap.has(receiver)) {
|
|
11
|
-
throw new TypeError("attempted to get private field on non-instance");
|
|
12
|
-
}
|
|
13
|
-
return privateMap.get(receiver);
|
|
1
|
+
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
2
|
+
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
3
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
4
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
5
|
+
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
14
6
|
};
|
|
15
|
-
var
|
|
16
|
-
|
|
7
|
+
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
8
|
+
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
9
|
+
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
10
|
+
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
17
11
|
};
|
|
18
|
-
var
|
|
19
|
-
|
|
20
|
-
var result = {};
|
|
21
|
-
if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
|
|
22
|
-
result["default"] = mod;
|
|
23
|
-
return result;
|
|
24
|
-
};
|
|
25
|
-
var _palette, _src;
|
|
26
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
|
-
const color_1 = require("./color");
|
|
12
|
+
var _Vibrant_src;
|
|
13
|
+
import { Swatch } from './color';
|
|
28
14
|
// eslint-disable-next-line import/no-cycle
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
15
|
+
import Builder from './builder';
|
|
16
|
+
import * as Util from './util';
|
|
17
|
+
import QuantizerMMCQ from './quantizer';
|
|
18
|
+
import { Default as DefaultGenerator } from './generator';
|
|
33
19
|
// eslint-disable-next-line import/no-cycle
|
|
34
|
-
|
|
20
|
+
import * as Filters from './filter';
|
|
35
21
|
class Vibrant {
|
|
22
|
+
static from(src) {
|
|
23
|
+
return new Builder(src);
|
|
24
|
+
}
|
|
36
25
|
constructor(src, opts) {
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
__classPrivateFieldSet(this, _src, src);
|
|
26
|
+
_Vibrant_src.set(this, void 0);
|
|
27
|
+
__classPrivateFieldSet(this, _Vibrant_src, src, "f");
|
|
40
28
|
this.opts = (Object.assign(Object.assign({}, Vibrant.DefaultOpts), opts));
|
|
41
29
|
this.opts.combinedFilter = Filters.combineFilters(this.opts.filters);
|
|
42
30
|
}
|
|
43
|
-
static from(src) {
|
|
44
|
-
return new builder_1.default(src);
|
|
45
|
-
}
|
|
46
31
|
process(image) {
|
|
47
32
|
const { quantizer, generator } = this.opts;
|
|
48
33
|
return image.applyFilter(this.opts.combinedFilter)
|
|
49
34
|
.then((imageData) => quantizer(imageData.data, this.opts))
|
|
50
|
-
.then((colors) =>
|
|
35
|
+
.then((colors) => Swatch.applyFilter(colors, this.opts.combinedFilter))
|
|
51
36
|
.then((colors) => Promise.resolve(generator(colors)));
|
|
52
37
|
}
|
|
53
|
-
palette() {
|
|
54
|
-
return __classPrivateFieldGet(this, _palette);
|
|
55
|
-
}
|
|
56
38
|
getPalette(cb) {
|
|
57
39
|
const image = new this.opts.ImageClass();
|
|
58
|
-
const result = image.load(__classPrivateFieldGet(this,
|
|
40
|
+
const result = image.load(__classPrivateFieldGet(this, _Vibrant_src, "f"), this.opts)
|
|
59
41
|
.then((loadedImage) => this.process(loadedImage))
|
|
60
42
|
.then((palette) => {
|
|
61
|
-
|
|
43
|
+
const paletteResult = {
|
|
44
|
+
pixelCount: image.pixelCount,
|
|
45
|
+
imageDimensions: {
|
|
46
|
+
width: image.width,
|
|
47
|
+
height: image.height,
|
|
48
|
+
},
|
|
49
|
+
palette,
|
|
50
|
+
};
|
|
62
51
|
image.cleanup();
|
|
63
|
-
return
|
|
52
|
+
return paletteResult;
|
|
64
53
|
}, (err) => {
|
|
65
54
|
image.cleanup();
|
|
66
55
|
throw err;
|
|
67
56
|
});
|
|
68
|
-
if (cb)
|
|
57
|
+
if (cb) {
|
|
69
58
|
result.then((palette) => cb(null, palette), (err) => cb(err));
|
|
59
|
+
}
|
|
70
60
|
return result;
|
|
71
61
|
}
|
|
72
62
|
}
|
|
73
|
-
|
|
74
|
-
Vibrant.Builder =
|
|
75
|
-
Vibrant.Quantizer =
|
|
76
|
-
Vibrant.Generator =
|
|
63
|
+
_Vibrant_src = new WeakMap();
|
|
64
|
+
Vibrant.Builder = Builder;
|
|
65
|
+
Vibrant.Quantizer = QuantizerMMCQ;
|
|
66
|
+
Vibrant.Generator = DefaultGenerator;
|
|
77
67
|
Vibrant.Filter = Filters;
|
|
78
68
|
Vibrant.Util = Util;
|
|
79
|
-
Vibrant.Swatch =
|
|
69
|
+
Vibrant.Swatch = Swatch;
|
|
80
70
|
Vibrant.DefaultOpts = {
|
|
81
71
|
colorCount: 64,
|
|
82
72
|
quality: 5,
|
|
83
|
-
generator:
|
|
73
|
+
generator: DefaultGenerator,
|
|
84
74
|
ImageClass: null,
|
|
85
|
-
quantizer:
|
|
75
|
+
quantizer: QuantizerMMCQ,
|
|
86
76
|
filters: [Filters.Default],
|
|
87
77
|
};
|
|
88
|
-
|
|
78
|
+
export default Vibrant;
|
|
89
79
|
//# sourceMappingURL=vibrant.js.map
|
package/lib/vibrant.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vibrant.js","sourceRoot":"","sources":["../src/vibrant.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vibrant.js","sourceRoot":"","sources":["../src/vibrant.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@livechart/sharp-vibrant",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "Extract prominent colors from an image in a node environment using sharp.",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"types": "lib/index.d.ts",
|
|
7
7
|
"dependencies": {
|
|
8
|
-
"@types/node": "^
|
|
9
|
-
"@types/sharp": "^0.
|
|
10
|
-
"sharp": "^0.
|
|
8
|
+
"@types/node": "^25.5.0",
|
|
9
|
+
"@types/sharp": "^0.32.0",
|
|
10
|
+
"sharp": "^0.34.5"
|
|
11
11
|
},
|
|
12
12
|
"devDependencies": {
|
|
13
13
|
"@types/chai": "^4.0.5",
|
|
@@ -26,9 +26,9 @@
|
|
|
26
26
|
"mocha": "^5.2.0",
|
|
27
27
|
"rimraf": "^2.6.1",
|
|
28
28
|
"table": "^5.1.0",
|
|
29
|
-
"ts-loader": "^5.
|
|
30
|
-
"ts-node": "^
|
|
31
|
-
"typescript": "^
|
|
29
|
+
"ts-loader": "^9.5.4",
|
|
30
|
+
"ts-node": "^10.9.2",
|
|
31
|
+
"typescript": "^6.0.2"
|
|
32
32
|
},
|
|
33
33
|
"scripts": {
|
|
34
34
|
"clean": "yarn run clean:node",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"test:node": "mocha --require ts-node/register src/test/**/*.spec.ts",
|
|
41
41
|
"sample:inspect": "cd fixtures/sample; yarn run start",
|
|
42
42
|
"sample:update": "cd fixtures/sample; yarn run update",
|
|
43
|
-
"prepublishOnly": "yarn run
|
|
43
|
+
"prepublishOnly": "yarn run build"
|
|
44
44
|
},
|
|
45
45
|
"repository": {
|
|
46
46
|
"type": "git",
|
package/src/builder.ts
CHANGED
|
@@ -6,9 +6,9 @@ import type {
|
|
|
6
6
|
Filter,
|
|
7
7
|
Quantizer,
|
|
8
8
|
Generator,
|
|
9
|
+
PaletteResult,
|
|
9
10
|
} from './typing';
|
|
10
11
|
|
|
11
|
-
import type { Palette } from './color';
|
|
12
12
|
// eslint-disable-next-line import/no-cycle
|
|
13
13
|
import Vibrant from './vibrant';
|
|
14
14
|
|
|
@@ -78,11 +78,7 @@ export default class Builder {
|
|
|
78
78
|
return new Vibrant(this.#src, this.#opts);
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
getPalette(cb?: Callback<
|
|
82
|
-
return this.build().getPalette(cb);
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
getSwatches(cb?: Callback<Palette>): Promise<Palette> {
|
|
81
|
+
getPalette(cb?: Callback<PaletteResult>): Promise<PaletteResult> {
|
|
86
82
|
return this.build().getPalette(cb);
|
|
87
83
|
}
|
|
88
84
|
}
|
package/src/image/base.ts
CHANGED
package/src/image/sharp.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import sharp from 'sharp';
|
|
2
|
+
import type { Sharp } from 'sharp';
|
|
2
3
|
import type { ImageData, ImageSource, ComputedOptions } from '../typing';
|
|
3
4
|
import ImageBase from './base';
|
|
4
5
|
|
|
@@ -6,12 +7,18 @@ export default class SharpImage extends ImageBase {
|
|
|
6
7
|
#imageData?: ImageData;
|
|
7
8
|
|
|
8
9
|
async load(image: ImageSource, opts: ComputedOptions): Promise<ImageBase> {
|
|
9
|
-
|
|
10
|
+
let sharpInstance: Sharp;
|
|
11
|
+
|
|
12
|
+
// Check to see if image is a sharp instance.
|
|
13
|
+
// Because sharp doesn't return a class, there's not much else we can do to verify type.
|
|
14
|
+
if (typeof image === 'object' && 'resize' in image) {
|
|
15
|
+
sharpInstance = <Sharp><unknown>image;
|
|
16
|
+
} else if (typeof image === 'string' || image instanceof Buffer) {
|
|
17
|
+
sharpInstance = sharp(image);
|
|
18
|
+
} else {
|
|
10
19
|
return Promise.reject(new Error(`Cannot load image of type ${typeof image}`));
|
|
11
20
|
}
|
|
12
21
|
|
|
13
|
-
let sharpInstance = sharp(image);
|
|
14
|
-
|
|
15
22
|
if (opts.maxDimension > 0) {
|
|
16
23
|
sharpInstance = sharpInstance.resize(opts.maxDimension, opts.maxDimension, {
|
|
17
24
|
fit: 'inside',
|
|
@@ -38,6 +45,14 @@ export default class SharpImage extends ImageBase {
|
|
|
38
45
|
return this.#imageData!;
|
|
39
46
|
}
|
|
40
47
|
|
|
48
|
+
get width(): number {
|
|
49
|
+
return this.imageData.width;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
get height(): number {
|
|
53
|
+
return this.imageData.height;
|
|
54
|
+
}
|
|
55
|
+
|
|
41
56
|
// eslint-disable-next-line class-methods-use-this
|
|
42
57
|
cleanup(): void {
|
|
43
58
|
|