是否可以将html十六进制颜色分类为简单的字符串值?
例如,颜色#CC3333,它不是完全红色,但作为人类,我们可以假设它是红色的。颜色#CCCCCC可以归类为白色,因为我不想涉及黑色或灰色。
可能的简单值至少包括:
更多分类更好,但我至少想要这些颜色。
可以吗?
可选信息:
我正在创建一个通过网络摄像头捕捉图片的网络应用。用户可以将白色或红色纸张保持在网络摄像头上,并且应用程序会检测图像的主要颜色。然后,用户将根据其颜色重定向到不同的选项。我已经完成了颜色检测,但我只想把它分为几种颜色,红色,白色和绿色。
答案 0 :(得分:2)
这是一个有点主观的问题,因为是的,它可以做到,但你究竟如何做到这将取决于你的具体应用 - 颜色本身在个人观察的方式上是非常主观的。
您需要首先将字符串拆分为红色,绿色和蓝色组件:
$colourId = 'CC3333';
list($red, $green, $blue) = str_split($colourId, 2);
然后,将它们转换为整数可能是一个想法:
$red = hexdec($red);
$green = hexdec($green);
$blue = hexdec($blue);
然后你需要对它应用某种逻辑来确定它属于哪个类。你是如何做到的,这取决于你,但也许你可以这样做:
if (max($red, $green, $blue) - min($red, $green, $blue) < 10) {
// If the values are all within a range of 10, we'll call it white
$class = 'white';
} else if (max($red, $green, $blue) == $red) {
// If red is the strongest, call it red
$class = 'red';
} else if (max($red, $green, $blue) == $green) {
// If green is the strongest, call it green
$class = 'green';
} else if (max($red, $green, $blue) == $blue) {
// If blue is the strongest, call it blue
$class = 'blue';
}
答案 1 :(得分:0)
很难将颜色分类为RGB模型,最好将颜色转换为HSL或HSV模型,然后您可以对颜色进行分类。有关详细信息,请查看at:http://en.wikipedia.org/wiki/Color_model
答案 2 :(得分:0)
首先需要将十六进制格式转换为rgb值。一个简单的谷歌搜索出现了this page。我没有测试过它,但是如果它没有正常工作那么我相信你可以找到一个不同的。
获得rgb值后,您需要定义颜色范围。以下代码在每个63.75的间隔创建颜色范围(每种颜色为4个范围,因此4 * 4 * 4 = 64个总范围):
function findColorRange($colorArray){
//assume $colorArray has the format [r,g,b], where r, g, and b are numbers in the range 0 - 255
for($i = 0; $i < 256; $i += 51){ //find red range first
if($colorArray[0] <= $i + 51/2 && $colorArray[0] >= $i - 51/2){
for($n = 51; $n < 256; $n += 51){ //green
if($colorArray[1] <= $n + 51/2 && $colorArray[1] >= $n - 51/2){
for($z = 51; $z < 256; $z += 51){ //blue
if($colorArray[2] <= $z + 51/2 && $colorArray[2] >= $z - 51/2){
return array($i,$n,$z);
}
}
}
}
}
}
}
上述函数将返回一个数组,用于定义相关颜色的颜色范围。从那里,您可以将可能的范围映射到您想要的任何字符串。这可能是通过创建一个关联数组最容易实现的,其中键是r,g,b值,值是字符串。例如:
$colorMap = array(
'0,0,0' => 'white',
'51,0,0' => 'light gray'
)