以前 RGB を HSV に変換するプログラムを作りましたが、 今回はその逆で、HSV を RGB に変換してみます。
function hsv2rgb($h, $s, $v){ if ( $s == 0 ) { $r = $v * 255; $g = $v * 255; $b = $v * 255; } else { $h = ($h >= 0) ? $h % 360 / 360 : $h % 360 / 360 + 1; $var_h = $h * 6; $i = (int)$var_h; $f = $var_h - $i; $p = $v * ( 1 - $s ); $q = $v * ( 1 - $s * $f ); $t = $v * ( 1 - $s * ( 1 - $f ) ); switch($i){ case 0: $var_r = $v; $var_g = $t; $var_b = $p; break; case 1: $var_r = $q; $var_g = $v; $var_b = $p; break; case 2: $var_r = $p; $var_g = $v; $var_b = $t; break; case 3: $var_r = $p; $var_g = $q; $var_b = $v; break; case 4: $var_r = $t; $var_g = $p; $var_b = $v; break; default: $var_r = $v; $var_g = $p; $var_b = $q; } $r = $var_r * 255; $g = $var_g * 255; $b = $var_b * 255; } return array($r, $g, $b); }
引数は色相、彩度、明度の順で渡します。
色相(H)は 0 ~ 360 を指定し、彩度(S)・明度(V)は 0 ~ 1 の小数で指定します。
結果は RGB 値( 0 ~ 255 )の配列で返されます。