rgbToHsl.js 857 B

12345678910111213141516171819202122232425262728293031323334353637
  1. exports = function(rgb) {
  2. var r = rgb[0] / 255;
  3. var g = rgb[1] / 255;
  4. var b = rgb[2] / 255;
  5. var min = mMin(r, g, b);
  6. var max = mMax(r, g, b);
  7. var delta = max - min;
  8. var h;
  9. var s;
  10. if (max === min) {
  11. h = 0;
  12. } else if (r === max) {
  13. h = (g - b) / delta;
  14. } else if (g === max) {
  15. h = 2 + (b - r) / delta;
  16. } else {
  17. h = 4 + (r - g) / delta;
  18. }
  19. h = mMin(h * 60, 360);
  20. if (h < 0) h += 360;
  21. var l = (min + max) / 2;
  22. if (max === min) {
  23. s = 0;
  24. } else if (l <= 0.5) {
  25. s = delta / (max + min);
  26. } else {
  27. s = delta / (2 - max - min);
  28. }
  29. var ret = [round(h), round(s * 100), round(l * 100)];
  30. if (rgb[3]) ret[3] = rgb[3];
  31. return ret;
  32. };
  33. var mMin = Math.min;
  34. var mMax = Math.max;
  35. var round = Math.round;
  36. module.exports = exports;