用于将十六进制转换为HSL的PHP函数(不是将HSL转换为十六进制)

用于将十六进制转换为HSL的PHP函数(不是将HSL转换为十六进制),php,colors,hex,hsl,Php,Colors,Hex,Hsl,有人知道如何在PHP中将十六进制颜色转换为HSL吗?我已经搜索过了,但是我找到的函数没有精确地转换颜色。函数hexToHsl($hex){ function hexToHsl($hex) { $hex = array($hex[0].$hex[1], $hex[2].$hex[3], $hex[4].$hex[5]); $rgb = array_map(function($part) { return hexdec($part) / 255; }, $he

有人知道如何在PHP中将十六进制颜色转换为HSL吗?我已经搜索过了,但是我找到的函数没有精确地转换颜色。

函数hexToHsl($hex){
function hexToHsl($hex) {
    $hex = array($hex[0].$hex[1], $hex[2].$hex[3], $hex[4].$hex[5]);
    $rgb = array_map(function($part) {
        return hexdec($part) / 255;
    }, $hex);

    $max = max($rgb);
    $min = min($rgb);

    $l = ($max + $min) / 2;

    if ($max == $min) {
        $h = $s = 0;
    } else {
        $diff = $max - $min;
        $s = $l > 0.5 ? $diff / (2 - $max - $min) : $diff / ($max + $min);

        switch($max) {
            case $rgb[0]:
                $h = ($rgb[1] - $rgb[2]) / $diff + ($rgb[1] < $rgb[2] ? 6 : 0);
                break;
            case $rgb[1]:
                $h = ($rgb[2] - $rgb[0]) / $diff + 2;
                break;
            case $rgb[2]:
                $h = ($rgb[0] - $rgb[1]) / $diff + 4;
                break;
        }

        $h /= 6;
    }

    return array($h, $s, $l);
}
$hex=数组($hex[0]。$hex[1],$hex[2]。$hex[3],$hex[4]。$hex[5]); $rgb=阵列映射(函数($part){ 返回hexdec(部分)/255; },$hex); $max=max($rgb); $min=min($rgb); $l=($max+$min)/2; 如果($max==$min){ $h=$s=0; }否则{ $diff=$max-$min; $s=$l>0.5?$diff/(2-$max-$min):$diff/($max+$min); 交换机($max){ 案例$rgb[0]: $h=($rgb[1]-$rgb[2])/$diff+($rgb[1]<$rgb[2]?6:0); 打破 案例$rgb[1]: $h=($rgb[2]-$rgb[0])/$diff+2; 打破 案例$rgb[2]: $h=($rgb[0]-$rgb[1])/$diff+4; 打破 } $h/=6; } 返回数组($h、$s、$l); }


您可能希望显示此脚本的原始版本…我已经尝试过此脚本。对于某些颜色,它不能正常工作。例如,对于#fbffe0,HSL应该是(68100%,94%),而函数不是这样。这是否回答了您的问题?谢谢你的回复。不幸的是没有,我想把十六进制转换成HSL而不是HSL转换成十六进制。谢谢你的回复。虽然它适用于#fbffe0,但对于某些颜色,它无法正常工作。例如,对于#f5efe1,HSL应该是(42,50%,92%),而函数返回HSL(0,100%,92%)。黄色的阴影变成粉红色的阴影。