首页 > 解决方案 > 有没有办法使用 php 对十六进制颜色进行分组

问题描述

我正在使用我在 GitHub 中找到的 PHP 颜色提取类用于我正在从事的项目。

颜色提取器类

https://github.com/humanmade/Colors-Of-Image

我的问题是,有没有办法将颜色分组为主要颜色。

示例:如果您在课堂上使用红色,则会给出

#ff0000 
#e50000 
#cc0000 

依此类推,取决于图像。我想做的是在保存到数据库之前将所有这些颜色设为红色。

是否有任何公式可以检查颜色范围?我搜索了几天,但找不到任何信息。珍惜你的时间。

标签: phpcolorshexcolor-picker

解决方案


这实际上取决于您希望拥有多少组但是因为三对负责红-绿-蓝,您可以将整个字符串(没有哈希)分成对,然后用hexdec函数将每对计算成十进制,看看它们是否都在你选择的一定范围内。

即:如果十六进制结果比第二对和第三对的总和大得多,那么您很可能会看到一些红色的变体。

示例代码:

$colors = [
    '#ff0000',
'#e50000',
'#cc0000',
];

foreach ($colors as $hex){
    list($redHex,$greenHex,$blueHex) = str_split(trim($hex,'#'),2);
    $redVal = hexdec($redHex);
    $greenVal = hexdec($greenHex);
    $blueVal = hexdec($blueHex);
    if($redVal > $greenVal+$blueVal){
        echo $hex.' is most likely red';
    }
}

推荐阅读