加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP函数将HSL转换为RGB或Hex

发布时间:2020-12-13 21:50:04 所属栏目:PHP教程 来源:网络整理
导读:有没有人知道 PHP函数(对于 5.3)可以将HSL颜色转换为RGB或Hex?我已经尝试了十几次Google搜索,但我发现的功能都没有按预期工作. 函数是否转换为RGB或十六进制并不重要,因为在这两者之间进行转换是微不足道的.输入是CSS的HSL值(色调:0-360,饱和度:0-100,亮
有没有人知道 PHP函数(对于> 5.3)可以将HSL颜色转换为RGB或Hex?我已经尝试了十几次Google搜索,但我发现的功能都没有按预期工作.

函数是否转换为RGB或十六进制并不重要,因为在这两者之间进行转换是微不足道的.输入是CSS的HSL值(色调:0-360,饱和度:0-100,亮度:0-100).

编辑:指定输入和输出格式将是一个奖金:)

解决方法

从Jim的评论( PHP HSV to RGB formula comprehension)链接中的一个答案中获取代码,我们可以按如下方式计算:

<?php    
    $hue = 209;
    $sat = 75;
    $lum = 60;

    $hue /= 360;
    $sat /= 100;
    $lum /= 100;

    $result = ColorHSLToRGB($hue,$sat,$lum);
    var_dump($result); echo '<br>';
    printf("rgb = %d,%d,%d<br>",$result['r'],$result['g'],$result['b']);




function ColorHSLToRGB($h,$s,$l){

        $r = $l;
        $g = $l;
        $b = $l;
        $v = ($l <= 0.5) ? ($l * (1.0 + $s)) : ($l + $s - $l * $s);
        if ($v > 0){
              $m;
              $sv;
              $sextant;
              $fract;
              $vsf;
              $mid1;
              $mid2;

              $m = $l + $l - $v;
              $sv = ($v - $m ) / $v;
              $h *= 6.0;
              $sextant = floor($h);
              $fract = $h - $sextant;
              $vsf = $v * $sv * $fract;
              $mid1 = $m + $vsf;
              $mid2 = $v - $vsf;

              switch ($sextant)
              {
                    case 0:
                          $r = $v;
                          $g = $mid1;
                          $b = $m;
                          break;
                    case 1:
                          $r = $mid2;
                          $g = $v;
                          $b = $m;
                          break;
                    case 2:
                          $r = $m;
                          $g = $v;
                          $b = $mid1;
                          break;
                    case 3:
                          $r = $m;
                          $g = $mid2;
                          $b = $v;
                          break;
                    case 4:
                          $r = $mid1;
                          $g = $m;
                          $b = $v;
                          break;
                    case 5:
                          $r = $v;
                          $g = $m;
                          $b = $mid2;
                          break;
              }
        }
        return array('r' => $r * 255.0,'g' => $g * 255.0,'b' => $b * 255.0);
}
?>

输出:

array(3) { ["r"]=> float(76.5) ["g"]=> float(155.55) ["b"]=> float(229.5) } 
rgb = 76,155,229

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读