index.js 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359
  1. import { rgb2hsl, hsl2rgb } from './lib/rgb-hsl';
  2. import { rgb2hwb, hwb2rgb } from './lib/rgb-hwb';
  3. import { rgb2hsv, hsv2rgb } from './lib/rgb-hsv';
  4. import { rgb2xyz, xyz2rgb } from './lib/rgb-xyz';
  5. import { hsl2hsv, hsv2hsl } from './lib/hsl-hsv';
  6. import { hwb2hsv, hsv2hwb } from './lib/hwb-hsv';
  7. import { lab2xyz, xyz2lab } from './lib/lab-xyz';
  8. import { lab2lch, lch2lab } from './lib/lab-lch';
  9. import { rgb2hue } from './lib/util';
  10. /* Convert between RGB and Lab
  11. /* ========================================================================== */
  12. function rgb2lab(rgbR, rgbG, rgbB) {
  13. const [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);
  14. const [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);
  15. return [ labL, labA, labB ];
  16. }
  17. function lab2rgb(labL, labA, labB) {
  18. const [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);
  19. const [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);
  20. return [ rgbR, rgbG, rgbB ];
  21. }
  22. /* Convert between RGB and LCH
  23. /* ========================================================================== */
  24. function rgb2lch(rgbR, rgbG, rgbB) {
  25. const [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);
  26. const [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);
  27. const [ lchL, lchC, lchH ] = lab2lch(labL, labA, labB);
  28. return [ lchL, lchC, lchH ];
  29. }
  30. function lch2rgb(lchL, lchC, lchH) {
  31. const [ labL, labA, labB ] = lch2lab(lchL, lchC, lchH);
  32. const [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);
  33. const [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);
  34. return [ rgbR, rgbG, rgbB ];
  35. }
  36. /* Convert between HSL and HWB
  37. /* ========================================================================== */
  38. function hwb2hsl(hwbH, hwbW, hwbB) {
  39. const [ hsvH, hsvS, hsvV ] = hwb2hsv(hwbH, hwbW, hwbB);
  40. const [ hslH, hslS, hslL ] = hsv2hsl(hsvH, hsvS, hsvV);
  41. return [ hslH, hslS, hslL ];
  42. }
  43. function hsl2hwb(hslH, hslS, hslL) {
  44. const [ , hsvS, hsvV ] = hsl2hsv(hslH, hslS, hslL);
  45. const [ , hwbW, hwbB ] = hsv2hwb(hslH, hsvS, hsvV);
  46. return [ hslH, hwbW, hwbB ];
  47. }
  48. /* Convert between HSL and Lab
  49. /* ========================================================================== */
  50. function hsl2lab(hslH, hslS, hslL) {
  51. const [ rgbR, rgbG, rgbB ] = hsl2rgb(hslH, hslS, hslL);
  52. const [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);
  53. const [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);
  54. return [ labL, labA, labB ];
  55. }
  56. function lab2hsl(labL, labA, labB, fallbackhue) {
  57. const [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);
  58. const [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);
  59. const [ hslH, hslS, hslL ] = rgb2hsl(rgbR, rgbG, rgbB, fallbackhue);
  60. return [ hslH, hslS, hslL ];
  61. }
  62. /* Convert between HSL and LCH
  63. /* ========================================================================== */
  64. function hsl2lch(hslH, hslS, hslL) {
  65. const [ rgbR, rgbG, rgbB ] = hsl2rgb(hslH, hslS, hslL);
  66. const [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);
  67. const [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);
  68. const [ lchL, lchC, lchH ] = lab2lch(labL, labA, labB);
  69. return [ lchL, lchC, lchH ];
  70. }
  71. function lch2hsl(lchL, lchC, lchH, fallbackhue) {
  72. const [ labL, labA, labB ] = lch2lab(lchL, lchC, lchH);
  73. const [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);
  74. const [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);
  75. const [ hslH, hslS, hslL ] = rgb2hsl(rgbR, rgbG, rgbB, fallbackhue);
  76. return [ hslH, hslS, hslL ];
  77. }
  78. /* Convert between HSL and XYZ
  79. /* ========================================================================== */
  80. function hsl2xyz(hslH, hslS, hslL) {
  81. const [ rgbR, rgbG, rgbB ] = hsl2rgb(hslH, hslS, hslL);
  82. const [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);
  83. return [ xyzX, xyzY, xyzZ ];
  84. }
  85. function xyz2hsl(xyzX, xyzY, xyzZ, fallbackhue) {
  86. const [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);
  87. const [ hslH, hslS, hslL ] = rgb2hsl(rgbR, rgbG, rgbB, fallbackhue);
  88. return [ hslH, hslS, hslL ];
  89. }
  90. /* Convert between HWB and Lab
  91. /* ========================================================================== */
  92. function hwb2lab(hwbH, hwbW, hwbB) {
  93. const [ rgbR, rgbG, rgbB ] = hwb2rgb(hwbH, hwbW, hwbB);
  94. const [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);
  95. const [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);
  96. return [ labL, labA, labB ];
  97. }
  98. function lab2hwb(labL, labA, labB, fallbackhue) {
  99. const [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);
  100. const [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);
  101. const [ hwbH, hwbW, hwbB ] = rgb2hwb(rgbR, rgbG, rgbB, fallbackhue);
  102. return [ hwbH, hwbW, hwbB ];
  103. }
  104. /* Convert between HWB and LCH
  105. /* ========================================================================== */
  106. function hwb2lch(hwbH, hwbW, hwbB) {
  107. const [ rgbR, rgbG, rgbB ] = hwb2rgb(hwbH, hwbW, hwbB);
  108. const [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);
  109. const [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);
  110. const [ lchL, lchC, lchH ] = lab2lch(labL, labA, labB);
  111. return [ lchL, lchC, lchH ];
  112. }
  113. function lch2hwb(lchL, lchC, lchH, fallbackhue) {
  114. const [ labL, labA, labB ] = lch2lab(lchL, lchC, lchH);
  115. const [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);
  116. const [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);
  117. const [ hwbH, hwbW, hwbB ] = rgb2hwb(rgbR, rgbG, rgbB, fallbackhue);
  118. return [ hwbH, hwbW, hwbB ];
  119. }
  120. /* Convert between HWB and XYZ
  121. /* ========================================================================== */
  122. function hwb2xyz(hwbH, hwbW, hwbB) {
  123. const [ rgbR, rgbG, rgbB ] = hwb2rgb(hwbH, hwbW, hwbB);
  124. const [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);
  125. return [ xyzX, xyzY, xyzZ ];
  126. }
  127. function xyz2hwb(xyzX, xyzY, xyzZ, fallbackhue) {
  128. const [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);
  129. const [ hwbH, hwbW, hwbB ] = rgb2hwb(rgbR, rgbG, rgbB, fallbackhue);
  130. return [ hwbH, hwbW, hwbB ];
  131. }
  132. /* Convert between HSV and Lab
  133. /* ========================================================================== */
  134. function hsv2lab(hsvH, hsvS, hsvV) {
  135. const [ rgbR, rgbG, rgbB ] = hsv2rgb(hsvH, hsvS, hsvV);
  136. const [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);
  137. const [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);
  138. return [ labL, labA, labB ];
  139. }
  140. function lab2hsv(labL, labA, labB, fallbackhue) {
  141. const [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);
  142. const [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);
  143. const [ hsvH, hsvS, hsvV ] = rgb2hsv(rgbR, rgbG, rgbB, fallbackhue);
  144. return [ hsvH, hsvS, hsvV ];
  145. }
  146. /* Convert between HSV and LCH
  147. /* ========================================================================== */
  148. function hsv2lch(hsvH, hsvS, hsvV) {
  149. const [ rgbR, rgbG, rgbB ] = hsv2rgb(hsvH, hsvS, hsvV);
  150. const [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);
  151. const [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);
  152. const [ lchL, lchC, lchH ] = lab2lch(labL, labA, labB);
  153. return [ lchL, lchC, lchH ];
  154. }
  155. function lch2hsv(lchL, lchC, lchH, fallbackhue) {
  156. const [ labL, labA, labB ] = lch2lab(lchL, lchC, lchH);
  157. const [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);
  158. const [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);
  159. const [ hsvH, hsvS, hsvV ] = rgb2hsv(rgbR, rgbG, rgbB, fallbackhue);
  160. return [ hsvH, hsvS, hsvV ];
  161. }
  162. /* Convert between HSV and XYZ
  163. /* ========================================================================== */
  164. function hsv2xyz(hsvH, hsvS, hsvV) {
  165. const [ rgbR, rgbG, rgbB ] = hsv2rgb(hsvH, hsvS, hsvV);
  166. const [ xyzX, xyzY, xyzZ ] = rgb2xyz(rgbR, rgbG, rgbB);
  167. return [ xyzX, xyzY, xyzZ ];
  168. }
  169. function xyz2hsv(xyzX, xyzY, xyzZ, fallbackhue) {
  170. const [ rgbR, rgbG, rgbB ] = xyz2rgb(xyzX, xyzY, xyzZ);
  171. const [ hsvH, hsvS, hsvV ] = rgb2hsv(rgbR, rgbG, rgbB, fallbackhue);
  172. return [ hsvH, hsvS, hsvV ];
  173. }
  174. /* Convert between XYZ and LCH
  175. /* ========================================================================== */
  176. function xyz2lch(xyzX, xyzY, xyzZ) {
  177. const [ labL, labA, labB ] = xyz2lab(xyzX, xyzY, xyzZ);
  178. const [ lchL, lchC, lchH ] = lab2lch(labL, labA, labB);
  179. return [ lchL, lchC, lchH ];
  180. }
  181. function lch2xyz(lchL, lchC, lchH) {
  182. const [ labL, labA, labB ] = lch2lab(lchL, lchC, lchH);
  183. const [ xyzX, xyzY, xyzZ ] = lab2xyz(labL, labA, labB);
  184. return [ xyzX, xyzY, xyzZ ];
  185. }
  186. /* All Conversions
  187. /* ========================================================================== */
  188. export {
  189. rgb2hsl,
  190. rgb2hwb,
  191. rgb2lab,
  192. rgb2lch,
  193. rgb2hsv,
  194. rgb2xyz,
  195. hsl2rgb,
  196. hsl2hwb,
  197. hsl2lab,
  198. hsl2lch,
  199. hsl2hsv,
  200. hsl2xyz,
  201. hwb2rgb,
  202. hwb2hsl,
  203. hwb2lab,
  204. hwb2lch,
  205. hwb2hsv,
  206. hwb2xyz,
  207. lab2rgb,
  208. lab2hsl,
  209. lab2hwb,
  210. lab2lch,
  211. lab2hsv,
  212. lab2xyz,
  213. lch2rgb,
  214. lch2hsl,
  215. lch2hwb,
  216. lch2lab,
  217. lch2hsv,
  218. lch2xyz,
  219. hsv2rgb,
  220. hsv2hsl,
  221. hsv2hwb,
  222. hsv2lab,
  223. hsv2lch,
  224. hsv2xyz,
  225. xyz2rgb,
  226. xyz2hsl,
  227. xyz2hwb,
  228. xyz2lab,
  229. xyz2lch,
  230. xyz2hsv,
  231. rgb2hue
  232. };
  233. export default {
  234. rgb2hsl,
  235. rgb2hwb,
  236. rgb2lab,
  237. rgb2lch,
  238. rgb2hsv,
  239. rgb2xyz,
  240. hsl2rgb,
  241. hsl2hwb,
  242. hsl2lab,
  243. hsl2lch,
  244. hsl2hsv,
  245. hsl2xyz,
  246. hwb2rgb,
  247. hwb2hsl,
  248. hwb2lab,
  249. hwb2lch,
  250. hwb2hsv,
  251. hwb2xyz,
  252. lab2rgb,
  253. lab2hsl,
  254. lab2hwb,
  255. lab2lch,
  256. lab2hsv,
  257. lab2xyz,
  258. lch2rgb,
  259. lch2hsl,
  260. lch2hwb,
  261. lch2lab,
  262. lch2hsv,
  263. lch2xyz,
  264. hsv2rgb,
  265. hsv2hsl,
  266. hsv2hwb,
  267. hsv2lab,
  268. hsv2lch,
  269. hsv2xyz,
  270. xyz2rgb,
  271. xyz2hsl,
  272. xyz2hwb,
  273. xyz2lab,
  274. xyz2lch,
  275. xyz2hsv,
  276. rgb2hue
  277. };