Php функция заказа цвета по легкости - PullRequest
1 голос
/ 09 августа 2011

Можно ли сортировать цвета по 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) ;

}

Но это не приведет к сортировке изображений по яркости.

Ответы [ 3 ]

4 голосов
/ 10 августа 2011

Вы можете получить приличное значение для яркости ( воспринимаемая яркость ) по следующей формуле:

$red * .3 + $green * .59 + $blue * .11

Цитата из связанной статьи:

Объяснение этих весов объясняется тем, что при равном количестве цветов глаз наиболее чувствителен к зеленому, затем к красному, а затем к голубому. Это означает, что при равном количестве зеленого и синего света зеленый, тем не менее, будет казаться намного ярче ».

1 голос
/ 09 августа 2011

Вы можете преобразовать свой цвет RGB в цветовое пространство HSL и отсортировать по компоненту L: http://axonflux.com/handy-rgb-to-hsl-and-rgb-to-hsv-color-model-c

1 голос
/ 09 августа 2011

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);
 })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...