Палитра от цветове

C++ JAVA
Post Reply
User avatar
dakata__92
Web-tourist
Web-tourist
Reactions: 1
Posts: 3398
Joined: Tue Aug 02, 2011 7:24 pm
Answers: 128

Палитра от цветове

Post by dakata__92 »

Здравейте. Има ли начин да въведа шестнадесетичен цвят примерно 000000 и в рамките на до 5% изсветляване или потъмняване да ми създаде масив с цветова палитра? Тоест търся някаква поредност на цветовете от въведен цвят. Например черно, малко по-светло черно и така до някакъв процент.
User avatar
djman
Гуру
Гуру
Reactions: 0
Posts: 2834
Joined: Sat Sep 12, 2009 8:07 am
Answers: 111

Re: Палитра от цветове

Post by djman »

На пръв поглед:
1) конвертирай hex към hsl (hue, saturation, lightness);
2) промени lightness компонентата;
3) конвертирай обратно към hex.
User avatar
deam0n
Web-tourist
Web-tourist
Reactions: 2
Posts: 3053
Joined: Sat Oct 01, 2005 4:33 pm
Answers: 204
Location: Шопландия
Contact:

Re: Палитра от цветове

Post by deam0n »

Намерих една функция която може би ще ти свърши работа. Реално обаче наистина е по-правилно да конвертираш към HSL и да промениш lightness параметъра.

Code: Select all

/**
 * Increases or decreases the brightness of a color by a percentage of the current brightness.
 *
 * @param   string  $hexCode        Supported formats: `#FFF`, `#FFFFFF`, `FFF`, `FFFFFF`
 * @param   float   $adjustPercent  A number between -1 and 1. E.g. 0.3 = 30% lighter; -0.4 = 40% darker.
 *
 * @return  string
 *
 * @author  maliayas
 */
function adjustBrightness($hexCode, $adjustPercent) {
    $hexCode = ltrim($hexCode, '#');

    if (strlen($hexCode) == 3) {
        $hexCode = $hexCode[0] . $hexCode[0] . $hexCode[1] . $hexCode[1] . $hexCode[2] . $hexCode[2];
    }

    $hexCode = array_map('hexdec', str_split($hexCode, 2));

    foreach ($hexCode as & $color) {
        $adjustableLimit = $adjustPercent < 0 ? $color : 255 - $color;
        $adjustAmount = ceil($adjustableLimit * $adjustPercent);

        $color = str_pad(dechex($color + $adjustAmount), 2, '0', STR_PAD_LEFT);
    }

    return '#' . implode($hexCode);
}
Post Reply