如何解决PHP:十六进制到HSL转换不适用于某些颜色
下面是我用来在PHP中将十六进制颜色值转换为HSL的函数。这几乎在所有时间都有效,但是,某些颜色会产生不正确的值,我无法弄清楚为什么。
function hexToHsl($hex)
{
$red = hexdec(substr($hex,2)) / 255;
$green = hexdec(substr($hex,2,2)) / 255;
$blue = hexdec(substr($hex,4,2)) / 255;
$cmin = min($red,$green,$blue);
$cmax = max($red,$blue);
$delta = $cmax - $cmin;
if ($delta === 0) {
$hue = 0;
} elseif ($cmax === $red) {
$hue = (($green - $blue) / $delta) % 6;
} elseif ($cmax === $green) {
$hue = ($blue - $red) / $delta + 2;
} else {
$hue = ($red - $green) / $delta + 4;
}
$hue = round($hue * 60);
if ($hue < 0) {
$hue += 360;
}
$lightness = (($cmax + $cmin) / 2) * 100;
$saturation = $delta === 0 ? 0 : ($delta / (1 - abs(2 * $lightness - 1))) * 100;
if ($saturation < 0) {
$saturation += 100;
}
$lightness = round($lightness);
$saturation = round($saturation);
return array("h" => $hue,"s" => $saturation,"l" => $lightness);
}
无法正常工作的颜色示例:
输入:#cd5985
预期产量:hsl(337,54%,58%)
实际输出:hsl(0,58%,100%)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。