RGB 是用三原色的混合来表示颜色的,HSL 的三个维度则是色相、饱和度、亮度。
RGB 比较贴近显示器的发光原理,大部分电脑屏幕的每个像素都是由 红绿蓝 三个发光点组成,根据 RGB 值控制发光强度。但是对于普通人来说,看 RGB 值的数字比较难以理解,很难从 RGB 值里面出这个颜色是什么颜色,饱和度高不高,亮度高不高。HSL 正是直接描述这三个维度的,因此在进行一些图像处理时,HSL 会更加合适。
根据搜索到的转换公式,我编写了一个函数,用于将 RGB 值转换成 HSL 值。
function rgb2hsl(r, g, b) {
r = r / 255
g = g / 255
b = b / 255
const max = Math.max(r, g, b)
const min = Math.min(r, g, b)
let h
let s
let v
let base
if (max === min) {
h = 0
} else {
if (max === r) {
base = 60 * ((g - b) / (max - min))
if (g >= b) {
h = base
} else {
h = base + 360
}
}
if (max === g) {
base = 60 * ((b - r) / (max - min))
h = base + 120
}
if (max === b) {
base = 60 * ((r - g) / (max - min))
h = base + 240
}
}
h = Math.round(h)
if (max === 0) {
s = 0
} else {
s = Math.round((1 - min / max) * 100) / 100
}
l = Math.round(((max + min) / 2) * 100) / 100
return [h, s, l]
}
把 rgb 值作为参数传进去就行,例如:
// 输入: rgb2hsl(76,188,27) // 输出: [102, 0.86, 0.42]
这是 HSL 色彩空间的示意图。它像是一个圆柱体。
H 色相,单位是度数,0° - 360°。以我自己的理解,如果按 60° 为一个单位,那么 0°-360° 的颜色依次为 红 黄 绿 青 蓝 紫 红,所以根据 H 的度数,我们就可以知道这是什么颜色。
S 饱和度,单位是百分比,0% 到 100%,从没有饱和度(白色)到完全饱和。
L 亮度,单位是百分比,0% 到 100%,从没有亮度(黑色)到全亮(白色)。
假如一个 HSL 颜色值是 300,0.4,0.4,你能想到它是什么颜色吗?
Google Chrome 71
Android 10
Google Chrome 81
Windows 10/11 芥末黄?
saber,saber你能不能帮找一下天地23的未删减合集,找了一星期了都没消息