Php 创建整个光谱的样例
我正在尝试为每种颜色创建一个样例,稍后我必须将其与图像的像素相匹配以创建马赛克 到目前为止,它没有显示任何内容。我不确定我是否正确运行了循环。它将每个数字取为$r$g$b,然后递增,并将其更改为十六进制格式,以便读取和显示 代码如下:Php 创建整个光谱的样例,php,loops,colors,rgb,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
$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>';
}
}
}
$r=000;
$g=000;
$b=000;
对于($r=000;$rfor($r=0;$rSo),由于所有的循环(创建1600万个跨度),这将是非常低效的,但是您的逻辑是正确的(ish),所以我将回答这个问题
for($r = 000; $r <= 155; $r++) {
for($r = 000; $r <= 155; $r++) {
for($r = 000; $r <= 155; $r++) {
关于($r=000;$r这里有几个问题:
- 我看到三个循环都在设置
$r
,它们可能应该是$r
,$g
,和$b
- 您可能希望在每一步都将每个变量增加1个以上。正如所写的(一旦r/g/b修复完成),您得到的脚本将生成大约273MB的HTML输出,这将生成一个大约100英尺高的页面(在屏幕上,假设72 dpi)
- 颜色的最大值是255,而不是155(除非您不喜欢明亮的颜色)
- 您要查找的CSS选择器只是
背景色
,而不是背景色
- 当十六进制颜色低于16(
10
hex)时,需要用零填充十六进制颜色。最简单的方法是:
$color = sprintf("#%02x%02x%02x", $r, $g, $b);
echo "... background-color:$color ...";
您的脚本中有多个错误,尤其是在格式化颜色值时。我在这里选择了sprintf
,因为它可以完成这项工作,并且在其他地方也很有用。然后CSS规则是错误的(-color
)。此外,我已将一些样式移到head部分,以减少编写的HTML输出。此外,我还引入了一个steps变量,以避免浏览器崩溃():
div{width:5px;height:5px;float:left;}
你在三个循环中使用$r,每个变量应该是一个。它们应该运行到255而不是155。这与你的问题没有关系,但是如果你声明一个前导为0的数字,八进制中需要注意的是dechex没有包含值0到F的前导0,因此你的css将是错误的。使用背景色:rgb($r,$g,$b)而不是转换成hex@Einacio:真的,真的,真的!
echo '<span style="width: 5px; height: 5px; background-color-color:#'.dechex($r).dechex($g).dechex($b).'">.</span>';
$color = sprintf("#%02x%02x%02x", $r, $g, $b);
echo "... background-color:$color ...";
<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>';
}
}
}