2014-10-28 1 views
0

아래의 16 진수 값이 흰색과 얼마나 가까운 지 확인하기 위해 다음 PHP 코드가 있습니다. 그러나 1에 가까운 높은 값은 흰색이 아니라 노란색입니다.16 진수 값이 흰색에 얼마나 가까운 지 확인하는 방법은 무엇입니까?

예를 들어, # f7f8f8 (흰색에 가까움)의 값은 .972이고 노란색의 값은 # fff100입니다. 여기서 어떤 변경이 필요합니까?

function is_verylight($hexcolor) { 
    $hexcolor = trim($hexcolor, "#"); 
    $r = hexdec(substr($hexcolor, 0 , 2)); 
    $g = hexdec(substr($hexcolor, 2 , 2)); 
    $b = hexdec(substr($hexcolor, 4 , 2)); 

    $hsv = rgb_to_hsv($r, $g, $b); 

    return ($hsv["V"] > .999); 
} 

function rgb_to_hsv($R, $G, $B) // RGB Values:Number 0-255 
{         // HSV Results:Number 0-1 
    $HSL = array(); 

    $var_R = ($R/255); 
    $var_G = ($G/255); 
    $var_B = ($B/255); 

    $var_Min = min($var_R, $var_G, $var_B); 
    $var_Max = max($var_R, $var_G, $var_B); 
    $del_Max = $var_Max - $var_Min; 

    $V = $var_Max; 

    if ($del_Max == 0) { 
    $H = 0; 
    $S = 0; 
    } 
    else { 
    $S = $del_Max/$var_Max; 

    $del_R = ((($var_Max - $var_R)/6) + ($del_Max/2))/$del_Max; 
    $del_G = ((($var_Max - $var_G)/6) + ($del_Max/2))/$del_Max; 
    $del_B = ((($var_Max - $var_B)/6) + ($del_Max/2))/$del_Max; 

    if  ($var_R == $var_Max) $H = $del_B - $del_G; 
    else if ($var_G == $var_Max) $H = (1/3) + $del_R - $del_B; 
    else if ($var_B == $var_Max) $H = (2/3) + $del_G - $del_R; 

    if ($H<0) $H++; 
    if ($H>1) $H--; 
    } 

    $HSL['H'] = $H; 
    $HSL['S'] = $S; 
    $HSL['V'] = $V; 

    return $HSL; 
    } 
+0

왜 is_verylight() 함수에서 두 개의 결과를 얻었습니까? –

+0

디버깅에서 남았습니다. 편집 됨. 캐치를 가져 주셔서 감사합니다. – heykatieben

답변

관련 문제