First Commit
This commit is contained in:
26
node_modules/culori/src/hwb/convertHwbToRgb.js
generated
vendored
Normal file
26
node_modules/culori/src/hwb/convertHwbToRgb.js
generated
vendored
Normal file
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
HWB to RGB converter
|
||||
--------------------
|
||||
|
||||
References:
|
||||
* https://drafts.csswg.org/css-color/#hwb-to-rgb
|
||||
* https://en.wikipedia.org/wiki/HWB_color_model
|
||||
* http://alvyray.com/Papers/CG/HWB_JGTv208.pdf
|
||||
*/
|
||||
|
||||
import convertHsvToRgb from '../hsv/convertHsvToRgb.js';
|
||||
|
||||
export default function convertHwbToRgb({ h, w, b, alpha }) {
|
||||
// normalize w + b to 1
|
||||
if (w + b > 1) {
|
||||
let s = w + b;
|
||||
w /= s;
|
||||
b /= s;
|
||||
}
|
||||
return convertHsvToRgb({
|
||||
h: h,
|
||||
s: b === 1 ? 1 : 1 - w / (1 - b),
|
||||
v: 1 - b,
|
||||
alpha: alpha
|
||||
});
|
||||
}
|
24
node_modules/culori/src/hwb/convertRgbToHwb.js
generated
vendored
Normal file
24
node_modules/culori/src/hwb/convertRgbToHwb.js
generated
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
RGB to HWB converter
|
||||
--------------------
|
||||
|
||||
References:
|
||||
* https://drafts.csswg.org/css-color/#hwb-to-rgb
|
||||
* https://en.wikipedia.org/wiki/HWB_color_model
|
||||
* http://alvyray.com/Papers/CG/HWB_JGTv208.pdf
|
||||
*/
|
||||
|
||||
import convertRgbToHsv from '../hsv/convertRgbToHsv.js';
|
||||
|
||||
export default function convertRgbToHwb(rgba) {
|
||||
let hsv = convertRgbToHsv(rgba);
|
||||
if (hsv === undefined) return undefined;
|
||||
let res = {
|
||||
mode: 'hwb',
|
||||
w: (1 - hsv.s) * hsv.v,
|
||||
b: 1 - hsv.v
|
||||
};
|
||||
if (hsv.h !== undefined) res.h = hsv.h;
|
||||
if (hsv.alpha !== undefined) res.alpha = hsv.alpha;
|
||||
return res;
|
||||
}
|
51
node_modules/culori/src/hwb/definition.js
generated
vendored
Normal file
51
node_modules/culori/src/hwb/definition.js
generated
vendored
Normal file
@@ -0,0 +1,51 @@
|
||||
import convertHwbToRgb from './convertHwbToRgb.js';
|
||||
import convertRgbToHwb from './convertRgbToHwb.js';
|
||||
import parseHwb from './parseHwb.js';
|
||||
import { fixupHueShorter } from '../fixup/hue.js';
|
||||
import { fixupAlpha } from '../fixup/alpha.js';
|
||||
import { interpolatorLinear } from '../interpolate/linear.js';
|
||||
import { differenceHueNaive } from '../difference.js';
|
||||
import { averageAngle } from '../average.js';
|
||||
|
||||
const definition = {
|
||||
mode: 'hwb',
|
||||
|
||||
toMode: {
|
||||
rgb: convertHwbToRgb
|
||||
},
|
||||
|
||||
fromMode: {
|
||||
rgb: convertRgbToHwb
|
||||
},
|
||||
|
||||
channels: ['h', 'w', 'b', 'alpha'],
|
||||
|
||||
ranges: {
|
||||
h: [0, 360]
|
||||
},
|
||||
|
||||
gamut: 'rgb',
|
||||
|
||||
parse: [parseHwb],
|
||||
serialize: c =>
|
||||
`hwb(${c.h || 0} ${c.w * 100}% ${c.b * 100}%${
|
||||
c.alpha < 1 ? ` / ${c.alpha}` : ''
|
||||
})`,
|
||||
|
||||
interpolate: {
|
||||
h: { use: interpolatorLinear, fixup: fixupHueShorter },
|
||||
w: interpolatorLinear,
|
||||
b: interpolatorLinear,
|
||||
alpha: { use: interpolatorLinear, fixup: fixupAlpha }
|
||||
},
|
||||
|
||||
difference: {
|
||||
h: differenceHueNaive
|
||||
},
|
||||
|
||||
average: {
|
||||
h: averageAngle
|
||||
}
|
||||
};
|
||||
|
||||
export default definition;
|
38
node_modules/culori/src/hwb/parseHwb.js
generated
vendored
Normal file
38
node_modules/culori/src/hwb/parseHwb.js
generated
vendored
Normal file
@@ -0,0 +1,38 @@
|
||||
import { Tok } from '../parse.js';
|
||||
|
||||
function ParseHwb(color, parsed) {
|
||||
if (!parsed || parsed[0] !== 'hwb') {
|
||||
return undefined;
|
||||
}
|
||||
const res = { mode: 'hwb' };
|
||||
const [, h, w, b, alpha] = parsed;
|
||||
|
||||
if (h.type !== Tok.None) {
|
||||
if (h.type === Tok.Percentage) {
|
||||
return undefined;
|
||||
}
|
||||
res.h = h.value;
|
||||
}
|
||||
|
||||
if (w.type !== Tok.None) {
|
||||
if (w.type === Tok.Hue) {
|
||||
return undefined;
|
||||
}
|
||||
res.w = w.type === Tok.Number ? w.value : w.value / 100;
|
||||
}
|
||||
|
||||
if (b.type !== Tok.None) {
|
||||
if (b.type === Tok.Hue) {
|
||||
return undefined;
|
||||
}
|
||||
res.b = b.type === Tok.Number ? b.value : b.value / 100;
|
||||
}
|
||||
|
||||
if (alpha.type !== Tok.None) {
|
||||
res.alpha = alpha.type === Tok.Number ? alpha.value : alpha.value / 100;
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
export default ParseHwb;
|
Reference in New Issue
Block a user