Создание образца всей цветовой гаммы - PullRequest
0 голосов
/ 08 августа 2011

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

На данный момент он ничего не отображает.Я не уверен, правильно ли я запускаю цикл.Он берет каждое число за $ r $ g $ b, затем увеличивает его и переводит в шестнадцатеричный формат для чтения и отображения.

Код здесь:

$r = 000;
$g = 000;
$b = 000;

for($r = 000; $r <= 155; $r++) {
    for($r = 000; $r <= 155; $r++) {
        for($r = 000; $r <= 155; $r++) {

        echo '<span style="width: 5px; height: 5px; background-color-color:#'.dechex($r).dechex($g).dechex($b).'">.</span>';


        }

    }

}

Заранее спасибо!

Ответы [ 4 ]

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

Несколько проблем здесь:

  • Я вижу три цикла, которые все устанавливают $r, которые, вероятно, должны быть $r, $g и $b.
  • Вы, вероятно, хотите увеличить каждую переменную более чем на 1 на каждом шаге.Как написано (как только будет выполнено исправление r / g / b), полученный скрипт сгенерирует около 273 МБ HTML-вывода, что даст страницу высотой около 100 футов (на экране при условии 72 dpi).
  • Максимальное значение цвета - 255, а не 155 (если вы не любите яркие цвета).
  • Селектор CSS, который вы ищете, это просто background-color, а не background-color-color.
  • Вам нужно дополнить шестнадцатеричные цвета нулями, когда они меньше 16 (10 hex).Самый простой способ сделать это:

    $color = sprintf("#%02x%02x%02x", $r, $g, $b);
    echo "... background-color:$color ...";
    
1 голос
/ 08 августа 2011
for ($r = 0; $r <= 255; $r++)
{
    for ($g = 0; $g <= 255; $g++)
    {
        for ($b = 0; $b <= 255; $b++)
        {
            echo sprintf('<span style="width: 5px; height: 5px; background-color: #%02X%02X%02X">.</span>', $r, $g, $b);
        }
    }
}

Вы использовали только $r в циклах, это также 255, а не 155.

Имейте в виду, что это создаст 256 * 256 * 256 = 16777216 span тегов / образцовКроме того, что ваш браузер потребляет много памяти, потребуется также и для завершения.

0 голосов
/ 08 августа 2011

В вашем скрипте было несколько ошибок, особенно при форматировании значения цвета. Я выбрал sprintf здесь, поскольку он делает работу и полезен в других местах. Тогда правило CSS было неверным (-color-color). Кроме того, я переместил некоторые стили в раздел head, чтобы уменьшить количество выводимого HTML-кода. Кроме того, я ввел переменную шагов, чтобы ваш браузер не падал ( Demo ):

<head><style>div {width:5px; height:5px; float:left;}</style></head>
<?php

$min = 0;
$max = 256;
$step = 15;

for ($r = $min; $r < $max; $r+=$step)
{
    for ($g = $min; $g < $max; $g+=$step)
    {
        for ($b = $min; $b < $max; $b+=$step)
        {
            echo '<div style="background-color:', sprintf('#%02x%02x%02x', $r, $g, $b), '"></div>';
        }
    }
}

(Просто увидев, что другие обнаружили те же проблемы, в то время как я ломал свой браузер (и хорошо объяснил), я оставляю ответ из-за демонстрации.)

0 голосов
/ 08 августа 2011

Итак, это будет ужасно неэффективно из-за всех циклов (создание 16 миллионов промежутков), но ваша логика верна (иш), поэтому я отвечу на вопрос.

for($r = 000; $r <= 155; $r++) {
    for($r = 000; $r <= 155; $r++) {
        for($r = 000; $r <= 155; $r++) {

Паранедостатки здесь:

  • Все они ссылаются на переменную $ r
  • Они доходят до 155, вы, вероятно, имели в виду 255?
  • Они начинаются с 000, возможно, такжепросто сделайте это 0, поскольку они равны одной и той же вещи.

Что касается следующего блока:

echo '<span style="width: 5px; height: 5px; background-color-color:#'.dechex($r).dechex($g).dechex($b).'">.</span>';

Основной недостаток здесь заключается в том, что вы делаете background-color-colorвместо цвета фона.

...