Получить обратное значение для шестнадцатеричного цвета фона - PHP - PullRequest
0 голосов
/ 26 февраля 2019

На моей странице есть календарь с заданными цветами в качестве цвета фона события (темно-синий или темно-бордовый).цвет фона применяется просто отлично.(Как видно на рисунке)

CALENDAR IMAGE WITH COLORDED ROWS

Теперь я должен применить передний план |цвет текста, который можно легко прочитать.(может быть абсолютно противоположным тому, что у меня есть «черный» => «белый» или «темно-коричневый» => «белый»).

Вот что я сделал до сих пор

public static function GenerateInverseColor($color){


        $color       = trim($color);
        $prependHash = FALSE;

        if(strpos($color,'#')!==FALSE) {
            $prependHash = TRUE;
            $color       = str_replace('#',NULL,$color);
        }

        switch($len=strlen($color)) {
            case 3:
                $color=preg_replace("/(.)(.)(.)/","\\1\\1\\2\\2\\3\\3",$color);
                break;
            case 6:
                break;
            default:
                trigger_error("Invalid hex length ($len). Must be a minimum length of (3) or maxium of (6) characters", E_USER_ERROR);
        }

        if(!preg_match('/^[a-f0-9]{6}$/i',$color)) {
            $color = htmlentities($color);
            trigger_error( "Invalid hex string #$color", E_USER_ERROR );
        }

        $r = dechex(255-hexdec(substr($color,0,2)));
        $r = (strlen($r)>1)?$r:'0'.$r;
        $g = dechex(255-hexdec(substr($color,2,2)));
        $g = (strlen($g)>1)?$g:'0'.$g;
        $b = dechex(255-hexdec(substr($color,4,2)));
        $b = (strlen($b)>1)?$b:'0'.$b;

        return ($prependHash?'#':NULL).$r.$g.$b;
}

Кроме того, я пытался

// provide balck|white color for any color
public static function GenerateInverseColor($hexcolor){

        $hexcolor       = trim($hexcolor);

        $r = hexdec(substr($hexcolor,0,2));
        $g = hexdec(substr($hexcolor,2,2));
        $b = hexdec(substr($hexcolor,4,2));
        $yiq = (($r*299)+($g*587)+($b*114))/1000;
        return ($yiq >= 128) ? 'black' : 'white';

}

И также

public static function GenerateInverseColor($hexcolor){
 if (strlen($color) != 6){ return '000000'; }
    $rgb = '';
    for ($x=0;$x<3;$x++){
        $c = 255 - hexdec(substr($color,(2*$x),2));
        $c = ($c < 0) ? 0 : dechex($c);
        $rgb .= (strlen($c) < 2) ? '0'.$c : $c;
    }
    return '#'.$rgb;
}

ни один из этих методов не помогает обеспечить желаемый результат.

Я пробовал почти каждый ответ, который ямог найти но никто не помогает.Цветная комбинация в изображении также основана на некотором ответе на SO, но не может выполнить мое требование

1 Ответ

0 голосов
/ 26 февраля 2019

В прошлом я использовал библиотеку ColorJizz для манипулирования цветами в PHP.У него должны быть методы для вычисления текста / фона, я помню, как использовал его для такой задачи.

Обратите внимание, что вам вовсе не гарантируется хороший интерфейс, полученный при работе со случайными цветами чисто математически.Цветовое восприятие сложнее, чем просто его композиция.Не говоря уже о том, что у вас могут получиться контрастные цвета, но эстетически выглядящие как мусор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...