Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php函数按亮度排序颜色_Php_Sorting_Colors - Fatal编程技术网

Php函数按亮度排序颜色

Php函数按亮度排序颜色,php,sorting,colors,Php,Sorting,Colors,是否可以通过php根据亮度对颜色进行排序 现在我用这个函数计算这个差 public function colorDiff($rgb1,$rgb2) { // do the math on each tuple // could use bitwise operates more efeceintly but just do strings for now. $red1 = hexdec(substr($rgb1,0,2)); $gr

是否可以通过php根据亮度对颜色进行排序

现在我用这个函数计算这个差

public function colorDiff($rgb1,$rgb2)
{
        // do the math on each tuple
        // could use bitwise operates more efeceintly 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($rgreen1 - $green2) + abs($blue2 - $blue2) ;

}
但这不会根据亮度对图像进行排序。

1)您需要亮度的数学定义。所以它应该从颜色到表示亮度的整数

2) 如果(例如)假设它是$red+$green+$blue的总和,则可以使用这种排序

 usort($colors,function ($rgb1,$rgb2){
    $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 ($red1+$green1+$blue1) - ($reg2+$green2+$blue2);
 })
1) 你需要用数学来定义亮度。所以它应该从颜色到表示亮度的整数

2) 如果(例如)假设它是$red+$green+$blue的总和,则可以使用这种排序

 usort($colors,function ($rgb1,$rgb2){
    $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 ($red1+$green1+$blue1) - ($reg2+$green2+$blue2);
 })

您可以将RGB颜色转换为HSL颜色空间和
L
组件上的排序:

您可以将RGB颜色转换为HSL颜色空间,并在
L
组件上进行排序:

您可以通过以下公式获得合适的亮度值(the):

$red * .3 + $green * .59 + $blue * .11
引用链接文章:

对这些权重的解释是因为对于等量的颜色,眼睛对绿色最敏感,然后是红色,然后是蓝色。这意味着,对于等量的绿光和蓝光,绿光看起来要亮得多。”


您可以使用以下公式获得适当的亮度(the)值:

$red * .3 + $green * .59 + $blue * .11
引用链接文章:

对这些重量的解释是因为,对于等量的颜色,眼睛对绿色最敏感,然后是红色,然后是蓝色。这意味着对于等量的绿色和蓝色,绿色看起来会更亮。”


如果函数中的字符串长度不是硬编码的,那么它可能会重复。。。255255255或25,25,25或#FFDDCC或#FDC是不同的,并且会对功能的布局方式造成问题。请注意,您的问题不是第一个问题,您的问题是您试图使用人类不可理解的词语(亮度、最接近的颜色)。这句话不能帮助你使用PC。PC需要事实、数字等。它的可能副本也明智的做法是不要硬编码函数中的字符串长度。。。255255255或25,25,25或#FFDDCC或#FDC是不同的,并且会对功能的布局方式造成问题。请注意,您的问题不是第一个问题,您的问题是您试图使用人类不可理解的词语(亮度、最接近的颜色)。PC需要事实、数字等。上面对亮度的定义是合理的,应该理解为“出租车”或“曼哈顿”与黑色的距离。另一个合理的选择是使用广义距离公式。。。黑色是一个矢量,所讨论的颜色是。i、 e.取分量差平方和的平方根。上述亮度定义是合理的——应理解为“出租车”或“曼哈顿”与黑色的距离。另一个合理的选择是使用广义距离公式。。。黑色是一个矢量,所讨论的颜色是。i、 e.取分量差平方和的平方根。