“距离”之间的颜色在PHP [英] "Distance" between colours in PHP
问题描述
我正在寻找一个函数,可以准确地表示两种颜色之间的距离作为数字或某事。
I'm looking for a function that can accurately represent the distance between two colours as a number or something.
例如,我想要一个数组HEX值或RGB数组,并且我想为数组中给定颜色找到最相似的颜色
For example I am looking to have an array of HEX values or RGB arrays and I want to find the most similar colour in the array for a given colour
例如。我通过一个函数的RGB值,并返回数组中的最接近颜色
eg. I pass a function a RGB value and the 'closest' colour in the array is returned
推荐答案
每种颜色都表示为元组在HEX代码中。要确定近似匹配,您需要分别减去每个RGB组件。
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) ;
}
这篇关于“距离”之间的颜色在PHP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!