Осветление или затемнение цвета в php

Печать RSS
127

Автор
Оранжевые штаны
0
Возник такой вопрос есть исходный цвет и нужно получить либо более светлый тон, либо тёмный. Например есть такой #4296BB а получить примерно такой #95C5DA. Гуглил два дня и ничего толкового для решения своей проблемы не нашёл.

Может быть у кого-то есть формула или функция для таких операций на php буду благодарен. Или же есть другое решение этой проблемы

Чатланин
0
ну дык это HEX, три числа в десятеричной форме, RGB (красный, зелёный, синий), понижаешь число - темнеет, повышаешь - светлеет

KinG`уренок
0
<?php
/*
*
* Преобразовывает строку $text в строку-градиент
* начиная с цвета $from и заканчивая цветом $to
* Поддерживает работу как и с rgb режимом так и с hex
*
* @param    string  $text - сама строка
* @param    string  $from - начальный цвет
* @param    string  $to   - Конечный цвет
* @param    string  $mode - Режим, по умолчанию hex
*/
function str2gradient($text,$from='',$to='', $mode="hex")
{
    if($mode=="hex")
    {
        $to  = hexdec($to[0].$to[1]).",".hexdec($to[2].$to[3]).",".hexdec($to[4].$to[5]);
        $from= hexdec($from[0].$from[1]).",".hexdec($from[2].$from[3]).",".hexdec($from[4].$from[5]);
    }

    if( empty($text) )
        return '';
    else
        $levels=strlen($text);

    if (empty($from))
                $from = array(0,0,255);
    else
                $from = explode(",", $from);

    if (empty($to))

                $to = array(255,0,0);
    else
                $to = explode(",", $to);

        $output = "";

        for ($i=1;$i<=$levels;$i++)
        {
                for ($ii=0;$ii<3;$ii++)
                {
                        $tmp[$ii] = $from[$ii] - $to[$ii];
                        $tmp[$ii] = floor($tmp[$ii] / $levels);
                        $rgb[$ii] = $from[$ii] - ($tmp[$ii] * $i);

                        if ($rgb[$ii] > 255) $rgb[$ii] = 255;

                        $rgb[$ii] = dechex($rgb[$ii]);
                        $rgb[$ii] = strtoupper($rgb[$ii]);

                        if (strlen($rgb[$ii]) < 2) $rgb[$ii] = "0$rgb[$ii]";
                }
            $output .= "<font color=\"#".$rgb[0].$rgb[1].$rgb[2]."\">" . $text[$i -1 ] . "</font>";
        }
        return $output."\n";
}
?>
П

Пацак
0
sscanf($rrggbb, '#%2x%2x%2x', $r, $g, $b);
Увеличиваешь/уменьшаешь $r, $g, $b и обратно
sprintf('#%2x%2x%2x', $r, $g, $b);
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск