rgb2hsv.js 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. // https://gist.github.com/mjackson/5311256
  2. function rgbToHsl(r, g, b) {
  3. r /= 255, g /= 255, b /= 255;
  4. var max = Math.max(r, g, b), min = Math.min(r, g, b);
  5. var h, s, l = (max + min) / 2;
  6. if (max == min) {
  7. h = s = 0; // achromatic
  8. } else {
  9. var d = max - min;
  10. s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
  11. switch (max) {
  12. case r: h = (g - b) / d + (g < b ? 6 : 0); break;
  13. case g: h = (b - r) / d + 2; break;
  14. case b: h = (r - g) / d + 4; break;
  15. }
  16. h /= 6;
  17. }
  18. return {h: h, s: s, l: l };
  19. }
  20. function RGBtoHSV(r, g, b) {
  21. if (arguments.length === 1) {
  22. g = r.g, b = r.b, r = r.r;
  23. }
  24. var max = Math.max(r, g, b), min = Math.min(r, g, b),
  25. d = max - min,
  26. h,
  27. s = (max === 0 ? 0 : d / max),
  28. v = max / 255;
  29. switch (max) {
  30. case min: h = 0; break;
  31. case r: h = (g - b) + d * (g < b ? 6: 0); h /= 6 * d; break;
  32. case g: h = (b - r) + d * 2; h /= 6 * d; break;
  33. case b: h = (r - g) + d * 4; h /= 6 * d; break;
  34. }
  35. return {
  36. h: h,
  37. s: s,
  38. v: v
  39. };
  40. };