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; }