2013-12-17 6 views
-2

Ive가 이해하지 못하는이 스크립트에 문제가 있습니다.PHP 색 인식 스크립트가 잘못된 색을 반환합니다.

지금까지 모든 것이 정확하다는 것을 알 수 있습니다. 스크립트는 루프에서도 작동하며 예상대로 색상을 반환합니다.

문제는 그 이미지를 스캔하여 색상 배열을 반환, 단지 시험과 미리 설정된 녹색을 사용하는 기능을 제거했습니다

... 색상이되고 출력이 잘못이다. 스크립트는 녹색 값이 같더라도 빨강에 가깝다고 생각합니다! 그 블록에 대한 작은 색상 차이 밖으로

일 : (일반적으로 루프) 테스트로 녹색 사용

function getColor($rgb) 
{ 

$colors = array(BLUE =>0x0a9ef3, RED => 0xea0a2f, GREEN => 0x336633); 

$largestDiff = 0; 
$closestColor = ""; 
foreach ($colors as $name => $rgbColor) 
{ 
    if (!isset($smallestDiff)) { 

     $smallestDiff = colorDiff($rgbColor,$rgb); 
     $closestColor = $name; 

    } else if (colorDiff($rgbColor,$rgb) < $smallestDiff) 
    { 
     $smallestDiff = colorDiff($rgbColor,$rgb); 
     $closestColor = $name; 
    } 

} 
return $closestColor; 

} 

function colorDiff($rgb1,$rgb2) 
{ 
// do the math on each tuple 

$red1 = hexdec(substr($rgb1,0,2)); 
$green1 = hexdec(substr($rgb1,2,2)); 
$blue1 = hexdec(substr($rgb1,4,2)); 

$red2 = hexdec(substr($rgb2,0,2)); 
$green2 = hexdec(substr($rgb2,2,2)); 
$blue2 = hexdec(substr($rgb2,4,2)); 

return abs($red1 - $red2) + abs($green1 - $green2) + abs($blue1 - $blue2) ; 


} 

실행 스크립트는

$color = '336633'; 
$closestmatch = getColor("0x".$color); 

출력 RED입니다! 도움!

이 문제는 colorDIFF 함수에서 발생합니까?

+0

의'필자 내가 understand.'이 * 한숨 * – SamV

+0

실례 그나마이 스크립트에 문제가있어? 너의 마음을 말하라. – user2010470

답변

1

사용 $closestmatch = getColor($color); 대신 $closestmatch = getColor("0x".$color);

$color = '336633'; 
echo getColor($color); // GREEN 
+0

처음에는 효과가 있었지만, 입력 색상을 변경 한 후 'ea0a2f'와 정확히 일치해야 Blue를 반환합니다! – user2010470

관련 문제