# “距离"PHP中的颜色之间

Each color is represented as a tuple in the HEX code. To determine close matches you need to subtract each RGB component separately.

``````Color 1: #112233
Color 2: #122334
Color 3: #000000

Difference between color1 and color2: R=1,  G=1   B=1  = 0x3
Difference between color3 and color1: R=11, G=22, B=33 = 0x66

So color 1 and color 2 are closer than
1 and 3.
``````

So you want the closest named color? Create an array with the hex values of each color, iterate it and return the name. Something like this;

``````function getColor(\$rgb)
{
// these are not the actual rgb values
\$colors = array(BLUE =>0xFFEEBB, RED => 0x103ABD, GREEN => 0x123456);

\$largestDiff = 0;
\$closestColor = "";
foreach (\$colors as \$name => \$rgbColor)
{
if (colorDiff(\$rgbColor,\$rgb) > \$largestDiff)
{
\$largestDiff = colorDiff(\$rgbColor,\$rgb);
\$closestColor = \$name;
}

}
return \$closestColor;

}

function colorDiff(\$rgb1,\$rgb2)
{
// do the math on each tuple
// could use bitwise operates more efficiently but just do strings for now.
\$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) ;

}
``````