创建整个色谱的样本

时间:2011-08-08 19:04:17

标签: php loops colors rgb

我正在尝试为每种颜色创建样本,稍后我必须将其与图像的像素进行匹配才能创建马赛克。

截至目前,它没有显示任何内容。我不确定我是否正确运行循环。它将每个数字换成$ 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 个答案:

答案 0 :(得分:1)

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标签/色板,除了让您的浏览器吃掉一小块内存外,还需要来完成

答案 1 :(得分:1)

这里有几个问题:

  • 我看到三个循环都设置为$r,可能应该是$r$g$b
  • 您可能希望在每个步骤中将每个变量增加1个以上。如上所述(一旦完成r / g / b修复),您获得的脚本将生成大约273 MB的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 ...";
    

答案 2 :(得分:0)

所以,由于所有的循环(创建了1600万个跨度),这将是极其低效的,但是你的逻辑是正确的(ish)所以我会回答这个问题。

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>';

这里的主要缺陷是你正在做背景颜色而不是背景颜色。

答案 3 :(得分:0)

您的脚本中存在多个错误,尤其是在格式化颜色值时。我在这里选择了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>';
        }
    }
}

(只是看到其他人发现同样的问题,同时我崩溃了我的浏览器(并且很好地解释了),因为演示,我留下了答案。)