SYNCERのロゴ
アイキャッチ画像

RGBをHSVに変換する方法

PHPを使って、カラーコードのRGBをHSVに変換します。

サンプルコード

0〜255のRGB値を指定して、H(0〜360)、S(0-1)、V(0-1)の値を取得します。HSVには円柱モデルと円錐モデルがあり、Sの計算方法が違います。ここでは円柱モデルを採用しています。

PHP

<?php
function rgb2hsv ( $rgb ) {
	$r = $rgb[0] / 255 ;
	$g = $rgb[1] / 255 ;
	$b = $rgb[2] / 255 ;

	$max = max( $r, $g, $b ) ;
	$min = min( $r, $g, $b ) ;
	$diff = $max - $min ;

	$h = 0 ;

	switch( $min ) {
		case $max :
			$h = 0 ;
		break ;

		case $r :
			$h = (60 * (($b - $g) / $diff)) + 180 ;
		break ;

		case $g :
			$h = (60 * (($r - $b) / $diff)) + 300 ;
		break ;

		case $b :
			$h = (60 * (($g - $r) / $diff)) + 60 ;
		break ;
	}

	$s = $max == 0 ? 0 : $diff / $max ;
	$v = $max ;

	return [ $h, $s, $v ] ;
}

rgb2hsv( [ 255, 128, 64 ] ) ;	// [ 20.104, 0.749, 1 ]

デモ

好きなRGB値を指定して、HSV値を確認してみて下さい。

<?php
/*** このコードは編集できます。 ***/

function rgb2hsv ( $rgb ) {
	$r = $rgb[0] / 255 ;
	$g = $rgb[1] / 255 ;
	$b = $rgb[2] / 255 ;

	$max = max( $r, $g, $b ) ;
	$min = min( $r, $g, $b ) ;
	$diff = $max - $min ;

	$h = 0 ;

	switch( $min ) {
		case $max :
			$h = 0 ;
		break ;

		case $r :
			$h = (60 * (($b - $g) / $diff)) + 180 ;
		break ;

		case $g :
			$h = (60 * (($r - $b) / $diff)) + 300 ;
		break ;

		case $b :
			$h = (60 * (($g - $r) / $diff)) + 60 ;
		break ;
	}

	$s = $max == 0 ? 0 : $diff / $max ;
	$v = $max ;

	return [ $h, $s, $v ] ;
}

var_dump( rgb2hsv( [ 255, 128, 64 ] ) ) ;
  • Twitterでシェア
  • Facebookでシェア
  • Google+でシェア
  • はてなブックマークでシェア
  • pocketに保存
  • LINEでシェア
更新履歴
2017年9月13日 (水)
コンテンツを公開しました。