以前 RGB を HSV に変換するプログラムを作りましたが、 今回はその逆で、HSV を RGB に変換してみます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | 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 )の配列で返されます。