HSL代表色彩、饱和度和亮度,每一个属性值运用一个数字量化。
色彩是颜色绝对色轮的地位,以度为单元从0°到359°,代表轮一周的360°,0°是白色,白色180°相反的色彩是青色,等等。饱和度是色彩暗淡或亮堂的强度。饱和度越低,色彩看起来越黯(灰色)。饱和度用百分数表现,100%是完整饱和的,最亮的,0%是完整不饱和灰色的。
亮度代表色彩的光明水平,和饱和度略有分歧。越白的色彩的亮度值越高,越黑,亮度值越低。所以100%的亮度的色彩是白色,0%是玄色,“纯”色是50%的亮度。
经过看来比拟饱和度和亮度之间的差别比说明它更轻易,假如你想弄明白,碰运气看colour calculator上的亮度和饱和度变更比拟图,选择一个亮的色彩作为你的启动器的色彩。
所以HSL标志系统看起来像如许,按色彩、饱和度和亮度的次序:
白色: 0° 100% 50%青色: 180° 100% 50%
2. 取色彩值相反值(比方,假如色彩是50°,相反值是230°-轮上转180°)。
3. 饱和度和亮度坚持稳定。4. 将转换后的HSL值处置会本来的色彩表现(RGB或此外甚么)。
所以如今我们只需求将色彩转换到HSL的公式,easyrgb.com有人给的在这里,运用“通用”代码描绘,如许你可以转化为你选用言语。
// $hexcode 是我们要转换的十六进制色彩代码的六个数字位。 $redhex = substr($hexcode,0,2); $greenhex = substr($hexcode,2,2); $bluehex = substr($hexcode,4,2); // $var_r, $var_g 和 $var_b 是盘算出的三个十进种柿魁,将作为我们 RGB-to-HSL 转换子顺序的输出参数。 $var_r = (hexdec($redhex)) / 255; $var_g = (hexdec($greenhex)) / 255; $var_b = (hexdec($bluehex)) / 255;如今把这三个值传入 rgb2hsl 子顺序中. 下面是我对EasyRGB.com上这类转换的通用代码写的PHP版本:
// 输出是上面失掉的 $var_r, $var_g 和 $var_b 。 // 输出是用 $h, $s 和 $l 表现的等价的 HSL ——它们和输出值一样,也是用1的分数来表现的。 $var_min = min($var_r,$var_g,$var_b); $var_max = max($var_r,$var_g,$var_b); $del_max = $var_max - $var_min; $l = ($var_max + $var_min) / 2; if ($del_max == 0) { $h = 0; $s = 0; } else { if ($l < 0.5) { $s = $del_max / ($var_max + $var_min); } else { $s = $del_max / (2 - $var_max - $var_min); }; $del_r = ((($var_max - $var_r) / 6) + ($del_max / 2)) / $del_max; $del_g = ((($var_max - $var_g) / 6) + ($del_max / 2)) / $del_max; $del_b = ((($var_max - $var_b) / 6) + ($del_max / 2)) / $del_max; if ($var_r == $var_max) { $h = $del_b - $del_g; } elseif ($var_g == $var_max) { $h = (1 / 3) + $del_r - $del_b; } elseif ($var_b == $var_max) { $h = (2 / 3) + $del_g - $del_r; }; if ($h < 0) { $h += 1; }; if ($h > 1) { $h -= 1; }; };所以如今我们有了一个在变量$h,$s 和 $l 中表现的 HSL值 的色彩。这三个输出变量在这个阶段再次用1的分数表现,而不是度数和百分比。所以比方,青色(180° 100% 50%)会用 $h = 0.5,$s = 1,$l = 0.5来表现。
// 盘算相反的色彩,用 $h2 表现 $h2 = $h + 0.5; if ($h2 > 1) { $h2 -= 1; };互补色彩的 HSL值 如今在$h2,$s 和 $l 中。所以我们预备把这个转换回RGB(异样是我对EasyRGB.com的公式写的PHP版本)。留意这一次输出和输特别式是分歧的,请看我在代码顶部写的注释:
// 输出是互补色的 HSL值,在变量 $h2,$s,$l 中以1的分数的方式盛放。 // 输出是凡是的 255 255 255 格局的 RGB值,在变量 $r, $g, $b 中盛放。 // 色彩运用 hue_2_rgb 函数转换,在代码的前面有这个函数的界说。 if ($s == 0) { $r = $l * 255; $g = $l * 255; $b = $l * 255; } else { if ($l < 0.5) { $var_2 = $l * (1 + $s); } else { $var_2 = ($l + $s) - ($s * $l); }; $var_1 = 2 * $l - $var_2; $r = 255 * hue_2_rgb($var_1,$var_2,$h2 + (1 / 3)); $g = 255 * hue_2_rgb($var_1,$var_2,$h2); $b = 255 * hue_2_rgb($var_1,$var_2,$h2 - (1 / 3)); }; // 转换色彩为 RGB 的函数,被上面代码挪用。 function hue_2_rgb($v1,$v2,$vh) { if ($vh < 0) { $vh += 1; }; if ($vh > 1) { $vh -= 1; }; if ((6 * $vh) < 1) { return ($v1 + ($v2 - $v1) * 6 * $vh); }; if ((2 * $vh) < 1) { return ($v2); }; if ((3 * $vh) < 2) { return ($v1 + ($v2 - $v1) * ((2 / 3 - $vh) * 6)); }; return ($v1); };在这些顺序以后,我们终极在 $r,$g 和 $b 中有了 255 255 255 格局的RGB值,我们可以把它们转换成十六进制的六个数字位,以下:
$rhex = sprintf("%02X",round($r)); $ghex = sprintf("%02X",round($g)); $bhex = sprintf("%02X",round($b)); $rgbhex = $rhex.$ghex.$bhex;$rgbhex 就是我们终极的谜底——十六进制的互补色值。 本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。 2KB翻译任务按照 CC 协定,假如我们的任务有进犯到您的权益,请实时联络我们。
2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务