Случайная функция возвращает только некоторые из возможных цветов - PullRequest
1 голос
/ 16 августа 2011

У меня есть функция php, которая генерирует случайный цвет, но мне нужно обрезать его, чтобы он возвращал только светлые цвета (чтобы текст мог легче контрастировать), как я могу это сделать? Мне трудно думать в Hex, чтобы сделать сравнения. Вот моя функция:

function randomColor() {
    $str = '#';
    for($i = 0 ; $i < 6 ; $i++) {
        $randNum = rand(0 , 15);
        switch ($randNum) {
            case 10: $randNum = 'A'; break;
            case 11: $randNum = 'B'; break;
            case 12: $randNum = 'C'; break;
            case 13: $randNum = 'D'; break;
            case 14: $randNum = 'E'; break;
            case 15: $randNum = 'F'; break;
        }
        $str .= $randNum;
    }
    return $str;
}
$color = randomColor();

Ответы [ 2 ]

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

Светлые цвета имеют более высокие значения в шестнадцатеричном формате (#FFFFFF = белый).

Было бы намного лучше создавать цвета по три, а не 6 отдельных частей, поэтому вы создаете красный, зеленый и синий компоненты.Кроме того, вы можете использовать dechex() для преобразования из десятичного числа в шестнадцатеричное и избавиться от этой уродливой структуры switch.

Вы можете просто установить минимальное значение в вашем rand() выше 0 для более светлых цветов.или равным образом уменьшите максимальное значение, чтобы сделать его темнее.

function randomColor ($minVal = 0, $maxVal = 255)
{

    // Make sure the parameters will result in valid colours
    $minVal = $minVal < 0 || $minVal > 255 ? 0 : $minVal;
    $maxVal = $maxVal < 0 || $maxVal > 255 ? 255 : $maxVal;

    // Generate 3 values
    $r = mt_rand($minVal, $maxVal);
    $g = mt_rand($minVal, $maxVal);
    $b = mt_rand($minVal, $maxVal);

    // Return a hex colour ID string
    return sprintf('#%02X%02X%02X', $r, $g, $b);

}

Таким образом, вы можете позвонить, например, randomColor(150,255), чтобы получить более светлый цвет, или randomColor(0,100), чтобы получить более темный цвет.

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

0xAA == 170, чтобы вы могли выбрать случайное число от 170 до 255 и преобразовать его в шестнадцатеричное.

function randomColor() {
    $str = '#';
    for($i = 0 ; $i < 3 ; $i++) {
        $str .= dechex( rand(170 , 255) );
    }
    return $str;
}
...