color.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. const r = /^\#?[0-9a-fA-F]{6}$/;
  2. //hex颜色转rgb颜色
  3. export function HexToRgb(str: string) {
  4. //test方法检查在字符串中是否存在一个模式,如果存在则返回true,否则返回false
  5. if (!r.test(str)) {
  6. console.log("颜色", str);
  7. throw new Error("输入错误的hex");
  8. }
  9. // replace替换查找的到的字符串
  10. str = str.replace("#", "");
  11. // match得到查询数组
  12. const hxs = str.match(/../g);
  13. return hxs?.map(h => parseInt(h, 16));
  14. }
  15. //GRB颜色转Hex颜色
  16. export function RgbToHex(a: any, b: any, c: any) {
  17. var r = /^\d{1,3}$/;
  18. if (!r.test(a) || !r.test(b) || !r.test(c))
  19. throw new Error("输入错误的rgb颜色值");
  20. var hexs = [a.toString(16), b.toString(16), c.toString(16)];
  21. for (var i = 0; i < 3; i++) if (hexs[i].length == 1) hexs[i] = "0" + hexs[i];
  22. return "#" + hexs.join("");
  23. }
  24. //得到hex颜色值为color的加深颜色值,level为加深的程度,限0-1之间
  25. export function getDarkColor(color: string, level: number) {
  26. if (!r.test(color)) throw new Error("输入错误的hex颜色值");
  27. const rgbc = HexToRgb(color);
  28. // floor 向下取整
  29. if (rgbc && rgbc.length === 3) {
  30. for (let i = 0; i < 3; i++) rgbc[i] = Math.floor(rgbc[i] * (1 - level));
  31. return RgbToHex(rgbc[0], rgbc[1], rgbc[2]);
  32. }
  33. throw new Error("输入错误的rgb颜色值");
  34. }
  35. /**
  36. * 得到颜色的减淡颜色值
  37. * @param color hex颜色值
  38. * @param level 加深的程度,限0-1之间
  39. */
  40. export function getLightColor(color: string, level: number) {
  41. if (!r.test(color)) throw new Error("输入错误的hex颜色值");
  42. const rgbc = HexToRgb(color);
  43. if (rgbc && rgbc.length === 3) {
  44. for (let i = 0; i < 3; i++)
  45. rgbc[i] = Math.floor((255 - rgbc[i]) * level + rgbc[i]);
  46. return RgbToHex(rgbc[0], rgbc[1], rgbc[2]);
  47. }
  48. throw new Error("输入错误的hex颜色值");
  49. }
  50. // 随机颜色
  51. export function randomColorOfHex() {
  52. //十六进制颜色随机
  53. var r = Math.random();
  54. var g = Math.random();
  55. var b = Math.random();
  56. g = 0.7 + g * 0.2; // [0.7 - 0.9] 排除过灰颜色
  57. b = 0.4 + b * 0.4; // [0.4 - 0.8] 排除过亮过暗色
  58. r = Math.floor(r * 256);
  59. g = Math.floor(g * 256);
  60. b = Math.floor(b * 256);
  61. let color = "#" + r.toString(16) + g.toString(16) + b.toString(16);
  62. return color;
  63. }