1

有没有办法即时将 hsl 颜色转换为 rgb 颜色?我在文档中搜索了这个功能,但目前似乎没有这样的功能。有没有办法为此创建一个自定义函数,其中转换就像$rgb = hslrgb($hsl)$hsl 和 $rgb 对应值的数组一样简单?!

4

1 回答 1

0

当然它可能......功能就是为此而设计的!这就是我经常用来进行此类转换的方法。它足够准确,即使我正在四舍五入一些值;)但另一方面它很快!

function hsl2rgb ( $hsl )
{
    $h = $hsl[0]; $s = $hsl[1]; $l = $hsl[2];

    $m2 = ( $l <= 0.5 ) ? $l * ( $s + 1 ) : $l + $s - $l * $s;
    $m1 = $l * 2 - $m2;

    $hue = function ( $base ) use ( $m1, $m2 ) {
        $base = ( $base < 0 ) ? $base + 1 : ( ( $base > 1 ) ? $base - 1 : $base );
        if ( $base * 6 < 1 ) return $m1 + ( $m2 - $m1 ) * $base * 6;
        if ( $base * 2 < 1 ) return $m2;
        if ( $base * 3 < 2 ) return $m1 + ( $m2 - $m1 ) * ( 0.66666 - $base ) * 6;
        return $m1;
    }

    return array( $hue( $h + 0.33333 ), $hue( $h ), $hue( $h - 0.33333 ) );
}
于 2012-11-28T01:29:09.890 回答