1、RGB颜色转换为十六进制

  1. String.prototype.colorHex = function(){
  2. var that = this;
  3. //十六进制颜色值的正则表达式
  4. var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  5. // 如果是rgb颜色表示
  6. if (/^(rgb|RGB)/.test(that)) {
  7. var aColor = that.replace(/(?:\(|\)|rgb|RGB)*/g, "").split(",");
  8. var strHex = "#";
  9. for (var i=0; i<aColor.length; i++) {
  10. var hex = Number(aColor[i]).toString(16);
  11. if (hex.length < 2) {
  12. hex = '0' + hex;
  13. }
  14. strHex += hex;
  15. }
  16. if (strHex.length !== 7) {
  17. strHex = that;
  18. }
  19. return strHex;
  20. } else if (reg.test(that)) {
  21. var aNum = that.replace(/#/,"").split("");
  22. if (aNum.length === 6) {
  23. return that;
  24. } else if(aNum.length === 3) {
  25. var numHex = "#";
  26. for (var i=0; i<aNum.length; i+=1) {
  27. numHex += (aNum[i] + aNum[i]);
  28. }
  29. return numHex;
  30. }
  31. }
  32. return that;
  33. };

2、十六进制颜色转为RGB格式

  1. String.prototype.colorRgb = function(){
  2. var sColor = this.toLowerCase();
  3. //十六进制颜色值的正则表达式
  4. var reg = /^#([0-9a-fA-f]{3}|[0-9a-fA-f]{6})$/;
  5. // 如果是16进制颜色
  6. if (sColor && reg.test(sColor)) {
  7. if (sColor.length === 4) {
  8. var sColorNew = "#";
  9. for (var i=1; i<4; i+=1) {
  10. sColorNew += sColor.slice(i, i+1).concat(sColor.slice(i, i+1));
  11. }
  12. sColor = sColorNew;
  13. }
  14. //处理六位的颜色值
  15. var sColorChange = [];
  16. for (var i=1; i<7; i+=2) {
  17. sColorChange.push(parseInt("0x"+sColor.slice(i, i+2)));
  18. }
  19. return "RGB(" + sColorChange.join(",") + ")";
  20. }
  21. return sColor;
  22. };

3、HSL转RGB

  1. /**
  2. * HSL颜色值转换为RGB.
  3. * 换算公式改编自 http://en.wikipedia.org/wiki/HSL_color_space.
  4. * h, s, 和 l 设定在 [0, 1] 之间
  5. * 返回的 r, g, 和 b 在 [0, 255]之间
  6. *
  7. * @param Number h 色相
  8. * @param Number s 饱和度
  9. * @param Number l 亮度
  10. * @return Array RGB色值数值
  11. */
  12. function hslToRgb(h, s, l) {
  13. var r, g, b;
  14. if(s == 0) {
  15. r = g = b = l; // achromatic
  16. } else {
  17. var hue2rgb = function hue2rgb(p, q, t) {
  18. if(t < 0) t += 1;
  19. if(t > 1) t -= 1;
  20. if(t < 1/6) return p + (q - p) * 6 * t;
  21. if(t < 1/2) return q;
  22. if(t < 2/3) return p + (q - p) * (2/3 - t) * 6;
  23. return p;
  24. }
  25. var q = l < 0.5 ? l * (1 + s) : l + s - l * s;
  26. var p = 2 * l - q;
  27. r = hue2rgb(p, q, h + 1/3);
  28. g = hue2rgb(p, q, h);
  29. b = hue2rgb(p, q, h - 1/3);
  30. }
  31. return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
  32. }

4、RGB转HSL

  1. /**
  2. * RGB 颜色值转换为 HSL.
  3. * 转换公式参考自 http://en.wikipedia.org/wiki/HSL_color_space.
  4. * r, g, 和 b 需要在 [0, 255] 范围内
  5. * 返回的 h, s, 和 l 在 [0, 1] 之间
  6. *
  7. * @param Number r 红色色值
  8. * @param Number g 绿色色值
  9. * @param Number b 蓝色色值
  10. * @return Array HSL各值数组
  11. */
  12. function rgbToHsl(r, g, b) {
  13. r /= 255, g /= 255, b /= 255;
  14. var max = Math.max(r, g, b), min = Math.min(r, g, b);
  15. var h, s, l = (max + min) / 2;
  16. if (max == min){
  17. h = s = 0; // achromatic
  18. } else {
  19. var d = max - min;
  20. s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
  21. switch(max) {
  22. case r: h = (g - b) / d + (g < b ? 6 : 0); break;
  23. case g: h = (b - r) / d + 2; break;
  24. case b: h = (r - g) / d + 4; break;
  25. }
  26. h /= 6;
  27. }
  28. return [h, s, l];
  29. }

5、RGB转HSB/HSV

  1. function rgbToHsv(r, g, b) {
  2. r = r / 255;
  3. g = g / 255;
  4. b = b / 255;
  5. var h, s, v;
  6. var min = Math.min(r, g, b);
  7. var max = v = Math.max(r, g, b);
  8. var l = (min + max) / 2;
  9. var difference = max - min;
  10. if (max == min) {
  11. h = 0;
  12. } else {
  13. switch (max) {
  14. case r:
  15. h = (g - b) / difference + (g < b ? 6 : 0);
  16. break;
  17. case g:
  18. h = 2.0 + (b - r) / difference;
  19. break;
  20. case b:
  21. h = 4.0 + (r - g) / difference;
  22. break;
  23. }
  24. h = Math.round(h * 60);
  25. }
  26. if (max == 0) {
  27. s = 0;
  28. } else {
  29. s = 1 - min / max;
  30. }
  31. s = Math.round(s * 100);
  32. v = Math.round(v * 100);
  33. return [h, s, v];
  34. }

———————————————————————-
本文摘录自:https://www.zhangxinxu.com/wordpress/2010/03/javascript-hex-rgb-hsl-color-convert/