如何在PHP中循环显示十六进制颜色代码?

时间:2009-09-21 15:26:01

标签: php colors

我想要一个数组,其中数组中的每个字段都包含颜色代码

array(0 => '#4CFF00', 1 => '#FFE97F')

我希望这能贯穿从绿色到黑色的各种颜色。

绿光>蓝色 - >深蓝色 - >紫色 - >黄色 - >橙色 - >红色 - >棕色 - >黑色

这个顺序不需要完全相同,但我认为你得到的图片。 任何人都可以帮忙吗?有没有一个网站以前做过这个?

9 个答案:

答案 0 :(得分:10)

你应该使用像Hue-Saturation-Value (HSV)这样的颜色模型,并将色调从光谱周围的0度循环到360度,在此任何饱和度和值都适合你。 (如果你想从绿色 - >绿色开始,只需从120度开始)

下面是一个显示基于RGB和HSV的渐变之间差异的图示:顶部渐变在RGB模型中从绿色变为红色,但较低的渐变使用HSV,从而产生更令人愉悦的效果。

alt text

答案 1 :(得分:1)

<00> 00FF00是绿色000000是黑色。所有你需要做的就是一次增加一种颜色,同时减少其他颜色。把它粘在一个循环中,在那里它是php,javascript或者其他什么然后去。

修改 以下是代码链接,其中显示了如何通过十六进制颜色代码loop

答案 2 :(得分:1)

function dechexpad($i){
$s="";
if($i<16) $s="0";
$s.=dechex($i);
return $s;
}
function hexcolor($r,$g,$b){
return "#".dechexpad($r%255).dechexpad($g%255).dechexpad($b%255);
}

$xx=array();
for($i=0;$i<255;$i++){
$xx[]=hexcolor($i*4,$i*2,$i);
}

答案 3 :(得分:1)

function list_colours($start, $end, $steps = 6)
{
    $return = array();

    $start_r = hexdec(substr($start, 1, 2));
    $start_g = hexdec(substr($start, 3, 2));
    $start_b = hexdec(substr($start, 5, 2));

    $end_r = hexdec(substr($end, 1, 2));
    $end_g = hexdec(substr($end, 3, 2));
    $end_b = hexdec(substr($end, 5, 2));

    $shift_r = ($end_r - $start_r) / $steps;
    $shift_g = ($end_g - $start_g) / $steps;
    $shift_b = ($end_b - $start_b) / $steps;

    for ($i = 0; $i < $steps; $i++)
    {
        $color = array();
        $color[] = dechex($start_r + ($i * $shift_r));
        $color[] = dechex($start_g + ($i * $shift_g));
        $color[] = dechex($start_b + ($i * $shift_b));

        // Pad with zeros.
        $color = array_map(function ($item) {
                return str_pad($item, 2, "0", STR_PAD_LEFT);
            },
            $color
        );

        $return[] = '#' . implode($color);
    }

    return $return;
}

// Examples
$spectrum = array();
$spectrum[] = list_colours("#000000", "#FFFFFF"); // grey
$spectrum[] = list_colours("#cc0033", "#FFFFFF"); // R
$spectrum[] = list_colours("#ff6600", "#FFFFFF"); // O
$spectrum[] = list_colours("#fdc710", "#FFFFFF"); // Y
$spectrum[] = list_colours("#cccc00", "#FFFFFF"); // G
$spectrum[] = list_colours("#339933", "#FFFFFF"); // G dark
$spectrum[] = list_colours("#339999", "#FFFFFF"); // B teal
$spectrum[] = list_colours("#14acde", "#FFFFFF"); // B light
$spectrum[] = list_colours("#0066cc", "#FFFFFF"); // B dark
$spectrum[] = list_colours("#663399", "#FFFFFF"); // I dark
$spectrum[] = list_colours("#990066", "#FFFFFF"); // I light
$spectrum[] = list_colours("#cc0066", "#FFFFFF"); // V pink

答案 4 :(得分:0)

你需要一些配色方案吗?我认为这取决于页面其余部分的配色方案。您可以谷歌“颜色方案生成器”,你可以找到至少10.上面的@edg和@santiiiii提供的例子。

如果您有照片,可以使用工具从照片中获取颜色以适合您的网站。

http://www.atalasoft.com/31apps/ColorSchemeGenerator/

答案 5 :(得分:0)

我建议编写一个函数来执行此操作。如果你需要在多种颜色之间进行操作,只需多次调用它并连接数组。

Psuedocode: `colorRange(arrayReference, startColor, endColor, numSteps)`

Get {R, G, B} startColor and endColor
Get R_diff, G_diff, and B_diff

for i in 0 to numSteps {
   arrayReference.append(
          i => {min(startR, endR) + (R_diff * (i / numSteps)),
                min(startG, endG) + (G_diff * (i / numSteps)),
                min(startB, endB) + (B_diff * (i / numSteps))}
          )
}

答案 6 :(得分:0)

查看hexdecdechex和此代码段:

for ($i = 0; $i < 255; $i++) {
    # here happens some colour-magic
}

干杯,

答案 7 :(得分:0)

我想如果您需要所有这些颜色,您可以按如下方式构建16776960元素数组:

<?php
    $end = 'FFFFFF';

    $arrMassiveColor = array();

    for($curr = 0; $curr <= dechex($end); $curr++) {
        $arrMassiveColor[] = '#'.hexdec($curr);
    }
?>

虽然看起来有点奇怪......

答案 8 :(得分:0)

我偶然发现了这个问题 - 令人惊讶的是我无法在网上找到实际的解决方案(我没有努力)。性能不仅仅是这里的要点 - 这不是你想要做的 - 这只是一个练习 - 但如果你真的想迭代所有的十六进制颜色 - 这就是你可以做到的:

for($i = 0; $i <= 16777215; $i++) {
    echo sprintf('%06s', dechex($i));
}

当然这个问题已经过时并且已经回答了,但我想我会分享这个问题。