Skip to content

Commit f71db88

Browse files
committed
refactor: optimized rgb to hsl color
1 parent 5036b30 commit f71db88

File tree

2 files changed

+23
-28
lines changed

2 files changed

+23
-28
lines changed

public/consolidated/javascript.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@
122122
"conversion"
123123
],
124124
"contributors": [],
125-
"code": "function rgbToHsl(r, g, b) {\n r /= 255;\n g /= 255;\n b /= 255;\n const max = Math.max(r, g, b),\n min = Math.min(r, g, b);\n let h, s, l;\n l = (max + min) / 2;\n\n if (max === min) {\n h = s = 0;\n } else {\n const d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return { h: Math.round(h * 360), s: Math.round(s * 100), l: Math.round(l * 100) };\n}\n\n// Usage:\nconsole.log(rgbToHsl(255, 87, 51)); // { h: 14, s: 100, l: 60 }\nconsole.log(rgbToHsl(255, 255, 255)); // { h: 0, s: 0, l: 100 }\n"
125+
"code": "function rgbToHsl(r, g, b) {\n [r, g, b] = [r, g, b].map((v) => v / 255);\n\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const delta = max - min;\n\n const l = (max + min) / 2;\n\n if (delta === 0) return { h: 0, s: 0, l: Math.round(l * 100) };\n\n const s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min);\n\n const h = \n max === r ? ((g - b) / delta + (g < b ? 6 : 0)) :\n max === g ? (b - r) / delta + 2 :\n (r - g) / delta + 4;\n\n return {\n h: Math.round(h * 60), \n s: Math.round(s * 100),\n l: Math.round(l * 100), \n };\n}\n\n// Usage:\nconsole.log(rgbToHsl(255, 87, 51)); // { h: 14, s: 100, l: 60 }\nconsole.log(rgbToHsl(255, 255, 255)); // { h: 0, s: 0, l: 100 }\n"
126126
}
127127
]
128128
},

snippets/javascript/color-manipulation/rgb-to-hsl-color.md

Lines changed: 22 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,33 +7,28 @@ tags: color,conversion
77

88
```js
99
function rgbToHsl(r, g, b) {
10-
r /= 255;
11-
g /= 255;
12-
b /= 255;
13-
const max = Math.max(r, g, b),
14-
min = Math.min(r, g, b);
15-
let h, s, l;
16-
l = (max + min) / 2;
17-
18-
if (max === min) {
19-
h = s = 0;
20-
} else {
21-
const d = max - min;
22-
s = l > 0.5 ? d / (2 - max - min) : d / (max + min);
23-
switch (max) {
24-
case r:
25-
h = (g - b) / d + (g < b ? 6 : 0);
26-
break;
27-
case g:
28-
h = (b - r) / d + 2;
29-
break;
30-
case b:
31-
h = (r - g) / d + 4;
32-
break;
33-
}
34-
h /= 6;
35-
}
36-
return { h: Math.round(h * 360), s: Math.round(s * 100), l: Math.round(l * 100) };
10+
[r, g, b] = [r, g, b].map((v) => v / 255);
11+
12+
const max = Math.max(r, g, b);
13+
const min = Math.min(r, g, b);
14+
const delta = max - min;
15+
16+
const l = (max + min) / 2;
17+
18+
if (delta === 0) return { h: 0, s: 0, l: Math.round(l * 100) };
19+
20+
const s = l > 0.5 ? delta / (2 - max - min) : delta / (max + min);
21+
22+
const h =
23+
max === r ? ((g - b) / delta + (g < b ? 6 : 0)) :
24+
max === g ? (b - r) / delta + 2 :
25+
(r - g) / delta + 4;
26+
27+
return {
28+
h: Math.round(h * 60),
29+
s: Math.round(s * 100),
30+
l: Math.round(l * 100),
31+
};
3732
}
3833

3934
// Usage:

0 commit comments

Comments
 (0)