以前 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 )の配列で返されます。
Similar Posts:
- [PHP]switch()は通常では厳密に型を比較しない
- [PHP]JSON+cURLで時刻同期型ワンタイムパスワードによる認証
- [PHP]Fatal Error発生時にログを作成する
- [PHP]数字に序数詞をつけて 1st, 2nd 3rd のように出力する
- [PHP]逆ポーランド記法への変換と計算
- [PHP]RGBをHSV(HSB)に変換する
- [PHP]文章中の単語に自動でリンクを貼る(キーワードリンク)
- [PHP]三次元空間での2点を結ぶ線分の中点