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;
}
왜 is_verylight() 함수에서 두 개의 결과를 얻었습니까? –
디버깅에서 남았습니다. 편집 됨. 캐치를 가져 주셔서 감사합니다. – heykatieben