t-comm
Version:
专业、稳定、纯粹的工具库
161 lines (158 loc) • 3.77 kB
JavaScript
import { parseHexChannel } from './helper.mjs';
import { rgb2hsv, hsl2hsv } from './transform.mjs';
function commonParseRGBOrHSL(_a) {
var value = _a.value,
_b = _a.reg,
reg = _b === void 0 ? /hsla|hsl|\(|\)/gm : _b,
_c = _a.transformFunc,
transformFunc = _c === void 0 ? hsl2hsv : _c;
var alpha = 100;
var h = 0;
var s = 100;
var v = 100;
var parts = value.replace(reg, '').split(/\s|,/g).filter(function (val) {
return val !== '';
}).map(function (val, index) {
return index > 2 ? parseFloat(val) : parseInt(val, 10);
});
if (parts.length === 4) {
alpha = Math.floor(parseFloat("".concat(parts[3])) * 100);
} else if (parts.length === 3) {
alpha = 100;
}
if (parts.length >= 3) {
var res = transformFunc(parts[0], parts[1], parts[2]);
h = res.h;
s = res.s;
v = res.v;
// fromHSV(h, s, v);
}
return {
h: h,
s: s,
v: v,
alpha: alpha
};
}
function parseHSLString(value) {
return commonParseRGBOrHSL({
value: value,
reg: /hsla|hsl|\(|\)/gm,
transformFunc: hsl2hsv
});
}
function parseHSVString(value) {
var h = 0;
var s = 100;
var v = 100;
var alpha = 100;
var parts = value.replace(/hsva|hsv|\(|\)/gm, '').split(/\s|,/g).filter(function (val) {
return val !== '';
}).map(function (val, index) {
return index > 2 ? parseFloat(val) : parseInt(val, 10);
});
if (parts.length === 4) {
alpha = Math.floor(parseFloat("".concat(parts[3])) * 100);
} else if (parts.length === 3) {
alpha = 100;
}
h = parts[0];
s = parts[1];
v = parts[2];
return {
h: h,
s: s,
v: v,
alpha: alpha
};
}
function parseRGBBracket(value) {
return commonParseRGBOrHSL({
value: value,
reg: /rgba|rgb|\(|\)/gm,
transformFunc: rgb2hsv
});
}
function parseRGBHex(value) {
var hex = value.replace('#', '').trim();
var r = 0;
var g = 0;
var b = 0;
var alpha = 0;
if (!/^(?:[0-9a-fA-F]{3}){1,2}|[0-9a-fA-F]{8}$/.test(hex)) {
return {
r: r,
g: g,
b: b,
alpha: alpha
};
}
if (hex.length === 3) {
r = parseHexChannel(hex[0] + hex[0]);
g = parseHexChannel(hex[1] + hex[1]);
b = parseHexChannel(hex[2] + hex[2]);
} else if (hex.length === 6 || hex.length === 8) {
r = parseHexChannel(hex.substring(0, 2));
g = parseHexChannel(hex.substring(2, 4));
b = parseHexChannel(hex.substring(4, 6));
}
if (hex.length === 8) {
alpha = Math.floor(parseHexChannel(hex.substring(6)) / 255 * 100);
} else if (hex.length === 3 || hex.length === 6) {
alpha = 100;
}
return {
r: r,
g: g,
b: b,
alpha: alpha
};
}
function parseColorToHSV(value) {
var alpha = 100;
var h = 0;
var s = 100;
var v = 100;
var fromHSV = function fromHSV(_h, _s, _v) {
h = Math.max(0, Math.min(360, _h));
s = Math.max(0, Math.min(100, _s));
v = Math.max(0, Math.min(100, _v));
};
if (value.indexOf('hsl') !== -1) {
var res = parseHSLString(value);
h = res.h;
s = res.s;
v = res.v;
alpha = res.alpha;
} else if (value.indexOf('hsv') !== -1) {
var res = parseHSVString(value);
h = res.h;
s = res.s;
v = res.v;
alpha = res.alpha;
} else if (value.indexOf('rgb') !== -1) {
var res = parseRGBBracket(value);
h = res.h;
s = res.s;
v = res.v;
alpha = res.alpha;
} else if (value.indexOf('#') !== -1) {
var rgb = parseRGBHex(value);
var r = rgb.r,
g = rgb.g,
b = rgb.b;
alpha = rgb.alpha;
var res = rgb2hsv(r, g, b);
h = res.h;
s = res.s;
v = res.v;
}
fromHSV(h, s, v);
return {
h: h,
s: s,
v: v,
alpha: alpha
};
}
export { parseColorToHSV, parseHSLString, parseHSVString, parseRGBBracket, parseRGBHex };