首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP:函数将html十六进制颜色分类为两个简单的字符串值。

PHP:函数将html十六进制颜色分类为两个简单的字符串值。
EN

Stack Overflow用户
提问于 2011-12-13 14:11:23
回答 3查看 585关注 0票数 0

可以将html十六进制颜色分类为简单的字符串值吗??

例如,颜色# can 3333,它不是完全红色,但作为一个人,我们可以假设它是红色的。颜色#CCCCCC可以归类为白色,因为我不想涉及黑色或灰色。

可能的简单值至少包括:

  • 红色
  • 白色
  • 绿色

更多的分类更好,但我至少要这些颜色。

能办到吗?

可选信息:

我正在创建一个通过网络摄像头捕捉图片的网络应用程序。用户可以拿着一张白色或红色的纸到摄像头上,应用程序就能检测到图像的主要颜色。然后,用户将被重定向到不同的选项,取决于他们的颜色。我已经做了颜色检测,但我只想把它分类为几种颜色,红色、白色和绿色。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-12-13 14:26:09

这是一个有点主观的问题,因为它是可以做到的,但你会怎样做将取决于你的具体应用-颜色本身是非常主观的方式,它是由个人观察。

首先,您需要将字符串拆分为红色、绿色和蓝色组件:

代码语言:javascript
复制
$colourId = 'CC3333';
list($red, $green, $blue) = str_split($colourId, 2);

那么,将它们转换为整数可能是一种想法:

代码语言:javascript
复制
$red = hexdec($red);
$green = hexdec($green);
$blue = hexdec($blue);

然后,您需要对其应用某种逻辑,以确定它属于哪个类。你如何做这件事真的取决于你自己,但也许你可以这样做:

代码语言:javascript
复制
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'; 
}
票数 2
EN

Stack Overflow用户

发布于 2011-12-13 14:21:46

在RGB模型中很难对颜色进行分类,最好将颜色转换为HSL或HSV模型,然后再对颜色进行分类。有关更多信息,您可以查看模型

票数 0
EN

Stack Overflow用户

发布于 2011-12-13 14:31:18

您首先需要将十六进制格式转换为rgb值。一个简单的谷歌搜索出现了此页。我还没有对它进行测试,但如果它不能正常工作,那么我相信您可以找到一个不同的测试。

一旦您有rgb值,您需要定义您的颜色范围。以下代码在每隔63.75个时间内创建颜色范围(即每种颜色4个范围,因此4*4*4 =64个总范围):

代码语言:javascript
复制
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值,值是字符串。例如:

代码语言:javascript
复制
$colorMap = array(
    '0,0,0' => 'white',
    '51,0,0' => 'light gray'
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8490602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档