获取随机HEX颜色值

  1. const randomHexColorCode = () => {
  2. let n = (Math.random() * 0xfffff * 1000000).toString(16)
  3. return '#' + n.slice(0, 6)
  4. };
  5. // 例子
  6. randomHexColorCode() // '#e34155'

RGB转HEX

  1. const RGBToHex = (r, g, b) =>
  2. ((r << 16) + (g << 8) + b).toString(16).padStart(6, '0');
  3. // 例子
  4. RGBToHex(255, 165, 1); // 'ffa501'

将 3 位颜色代码扩展到 6 位颜色代码

  1. const extendHex = shortHex =>
  2. '#' +
  3. shortHex
  4. .slice(shortHex.startsWith('#') ? 1 : 0)
  5. .split('')
  6. .map(x => x + x)
  7. .join('');
  8. // 例子
  9. extendHex('#03f'); // '#0033ff'
  10. extendHex('05a'); // '#0055aa'

HEX转RBG

  1. const hexToRGB = hex => {
  2. let alpha = false,
  3. h = hex.slice(hex.startsWith('#') ? 1 : 0);
  4. if (h.length === 3) h = [...h].map(x => x + x).join('')
  5. else if (h.length === 8) alpha = true
  6. h = parseInt(h, 16)
  7. return (
  8. 'rgb' +
  9. (alpha ? 'a' : '') +
  10. '(' +
  11. (h >>> (alpha ? 24 : 16)) +
  12. ', ' +
  13. ((h & (alpha ? 0x00ff0000 : 0x00ff00)) >>> (alpha ? 16 : 8)) +
  14. ', ' +
  15. ((h & (alpha ? 0x0000ff00 : 0x0000ff)) >>> (alpha ? 8 : 0)) +
  16. (alpha ? `, ${h & 0x000000ff}` : '') +
  17. ')'
  18. )
  19. }
  20. // 例子
  21. hexToRGB('#27ae60ff') // 'rgba(39, 174, 96, 255)'
  22. hexToRGB('27ae60') // 'rgb(39, 174, 96)'
  23. hexToRGB('#fff') // 'rgb(255, 255, 255)'

RGB转Array

  1. const toRGBArray = rgbStr => rgbStr.match(/\d+/g).map(Number)
  2. // 例子
  3. toRGBArray('rgb(255, 12, 0)') // [255, 12, 0]

RGB转Object

  1. const toRGBObject = rgbStr => {
  2. const [red, green, blue] = rgbStr.match(/\d+/g).map(Number)
  3. return { red, green, blue }
  4. }
  5. // 例子
  6. toRGBObject('rgb(255, 12, 0)'); // {red: 255, green: 12, blue: 0}

RGB转HSB

  1. const RGBToHSB = (r, g, b) => {
  2. r /= 255;
  3. g /= 255;
  4. b /= 255;
  5. const v = Math.max(r, g, b),
  6. n = v - Math.min(r, g, b);
  7. const h =
  8. n === 0 ? 0 : n && v === r ? (g - b) / n : v === g ? 2 + (b - r) / n : 4 + (r - g) / n;
  9. return [60 * (h < 0 ? h + 6 : h), v && (n / v) * 100, v * 100];
  10. };
  11. // 例子
  12. RGBToHSB(252, 111, 48);
  13. // [18.529411764705856, 80.95238095238095, 98.82352941176471]

HSB转RGB

  1. const HSBToRGB = (h, s, b) => {
  2. s /= 100;
  3. b /= 100;
  4. const k = (n) => (n + h / 60) % 6;
  5. const f = (n) => b * (1 - s * Math.max(0, Math.min(k(n), 4 - k(n), 1)));
  6. return [255 * f(5), 255 * f(3), 255 * f(1)];
  7. };
  8. // 例子
  9. HSBToRGB(18, 81, 99); // [252.45, 109.31084999999996, 47.965499999999984]

RGB转HSL

  1. const RGBToHSL = (r, g, b) => {
  2. r /= 255;
  3. g /= 255;
  4. b /= 255;
  5. const l = Math.max(r, g, b);
  6. const s = l - Math.min(r, g, b);
  7. const h = s
  8. ? l === r
  9. ? (g - b) / s
  10. : l === g
  11. ? 2 + (b - r) / s
  12. : 4 + (r - g) / s
  13. : 0;
  14. return [
  15. 60 * h < 0 ? 60 * h + 360 : 60 * h,
  16. 100 * (s ? (l <= 0.5 ? s / (2 * l - s) : s / (2 - (2 * l - s))) : 0),
  17. (100 * (2 * l - s)) / 2,
  18. ];
  19. };
  20. // 例子
  21. RGBToHSL(45, 23, 11); // [21.17647, 60.71428, 10.98039]

HSL转RGB

  1. const HSLToRGB = (h, s, l) => {
  2. s /= 100;
  3. l /= 100;
  4. const k = n => (n + h / 30) % 12;
  5. const a = s * Math.min(l, 1 - l);
  6. const f = n =>
  7. l - a * Math.max(-1, Math.min(k(n) - 3, Math.min(9 - k(n), 1)));
  8. return [255 * f(0), 255 * f(8), 255 * f(4)];
  9. };
  10. // 例子
  11. HSLToRGB(13, 100, 11); // [56.1, 12.155, 0]

HSL改变亮度值

  1. const changeLightness = (delta, hslStr) => {
  2. const [hue, saturation, lightness] = hslStr.match(/\d+/g).map(Number);
  3. const newLightness = Math.max(
  4. 0,
  5. Math.min(100, lightness + parseFloat(delta))
  6. );
  7. return `hsl(${hue}, ${saturation}%, ${newLightness}%)`;
  8. };
  9. // 例子
  10. changeLightness(10, 'hsl(330, 50%, 50%)'); // 'hsl(330, 50%, 60%)'
  11. changeLightness(-10, 'hsl(330, 50%, 50%)'); // 'hsl(330, 50%, 40%)'

HSL转Array

  1. const toHSLArray = hslStr => hslStr.match(/\d+/g).map(Number);
  2. // 例子
  3. toHSLArray('hsl(50, 10%, 10%)'); // [50, 10, 10]

HSL转Object

  1. const toHSLObject = hslStr => {
  2. const [hue, saturation, lightness] = hslStr.match(/\d+/g).map(Number);
  3. return { hue, saturation, lightness };
  4. };
  5. // 例子
  6. toHSLObject('hsl(50, 10%, 10%)'); // { hue: 50, saturation: 10, lightness: 10 }