12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- const r = /^\#?[0-9a-fA-F]{6}$/;
- //hex颜色转rgb颜色
- export function HexToRgb(str: string) {
- //test方法检查在字符串中是否存在一个模式,如果存在则返回true,否则返回false
- if (!r.test(str)) {
- console.log("颜色", str);
- throw new Error("输入错误的hex");
- }
- // replace替换查找的到的字符串
- str = str.replace("#", "");
- // match得到查询数组
- const hxs = str.match(/../g);
- return hxs?.map(h => parseInt(h, 16));
- }
- //GRB颜色转Hex颜色
- export function RgbToHex(a: any, b: any, c: any) {
- var r = /^\d{1,3}$/;
- if (!r.test(a) || !r.test(b) || !r.test(c))
- throw new Error("输入错误的rgb颜色值");
- var hexs = [a.toString(16), b.toString(16), c.toString(16)];
- for (var i = 0; i < 3; i++) if (hexs[i].length == 1) hexs[i] = "0" + hexs[i];
- return "#" + hexs.join("");
- }
- //得到hex颜色值为color的加深颜色值,level为加深的程度,限0-1之间
- export function getDarkColor(color: string, level: number) {
- if (!r.test(color)) throw new Error("输入错误的hex颜色值");
- const rgbc = HexToRgb(color);
- // floor 向下取整
- if (rgbc && rgbc.length === 3) {
- for (let i = 0; i < 3; i++) rgbc[i] = Math.floor(rgbc[i] * (1 - level));
- return RgbToHex(rgbc[0], rgbc[1], rgbc[2]);
- }
- throw new Error("输入错误的rgb颜色值");
- }
- /**
- * 得到颜色的减淡颜色值
- * @param color hex颜色值
- * @param level 加深的程度,限0-1之间
- */
- export function getLightColor(color: string, level: number) {
- if (!r.test(color)) throw new Error("输入错误的hex颜色值");
- const rgbc = HexToRgb(color);
- if (rgbc && rgbc.length === 3) {
- for (let i = 0; i < 3; i++)
- rgbc[i] = Math.floor((255 - rgbc[i]) * level + rgbc[i]);
- return RgbToHex(rgbc[0], rgbc[1], rgbc[2]);
- }
- throw new Error("输入错误的hex颜色值");
- }
- // 随机颜色
- export function randomColorOfHex() {
- //十六进制颜色随机
- var r = Math.random();
- var g = Math.random();
- var b = Math.random();
- g = 0.7 + g * 0.2; // [0.7 - 0.9] 排除过灰颜色
- b = 0.4 + b * 0.4; // [0.4 - 0.8] 排除过亮过暗色
- r = Math.floor(r * 256);
- g = Math.floor(g * 256);
- b = Math.floor(b * 256);
- let color = "#" + r.toString(16) + g.toString(16) + b.toString(16);
- return color;
- }
|