PHP HSV to RGB formula comprehension

后端 未结 6 1850
挽巷
挽巷 2020-12-01 16:37

I can convert RGB values to HSV with the following code...

 $r = $r/255;
 $g = $g/255;
 $b = $b/255;

 $h = 0;
 $s = 0;
 $v         


        
6条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-01 17:01

    Translation of rolls answer for HSL from C to PHP

    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);
    }
    

提交回复
热议问题