我正在尝试为每种颜色创建样本,稍后我必须将其与图像的像素进行匹配才能创建马赛克。
截至目前,它没有显示任何内容。我不确定我是否正确运行循环。它将每个数字换成$ 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>';
}
}
}
提前致谢!
答案 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
。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++) {
这里存在一些缺陷:
至于下一个街区:
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>';
}
}
}
(只是看到其他人发现同样的问题,同时我崩溃了我的浏览器(并且很好地解释了),因为演示,我留下了答案。)