PHP生成RGB

时间:2012-02-08 00:08:17

标签: php random colors rgb

我正面临着这样一种情况:我有一个来自数据库的ID(所以它可能是1,100,1000,......)我需要生成随机颜色,但是相同的ID应该会产生相同的颜色颜色。

关于如何实现这一目标的任何建议?

谢谢!

4 个答案:

答案 0 :(得分:30)

使用加密哈希并剪切您不需要的字节:

function getColor($num) {
    $hash = md5('color' . $num); // modify 'color' to get a different palette
    return array(
        hexdec(substr($hash, 0, 2)), // r
        hexdec(substr($hash, 2, 2)), // g
        hexdec(substr($hash, 4, 2))); //b
}

结果(code to generate it)对于数字0-20看起来像这样:

demo output

答案 1 :(得分:2)

<?php 
// someting like this?
$randomString = md5($your_id_here); // like "d73a6ef90dc6a ..."
$r = substr($randomString,0,2); //1. and 2.
$g = substr($randomString,2,2); //3. and 4.
$b = substr($randomString,4,2); //5. and 6.
?>
<style>
#topbar { border-bottom:4px solid #<?php echo $r.$g.$b;  ?>; }
</style>

答案 2 :(得分:1)

显而易见的方法是将ID转换为颜色(例如,低8位是蓝色,接下来的8位是绿色,接下来的8位是红色 - 留下8位,但我相信你可以解决这个问题; - )

假设这不起作用(因为你最终会得到一个可怕的调色板: 使用数组(或哈希表)将ID映射到Colors。

如果您担心ID太多,那么您可以对ID应用一些哈希值,并在键入“id to color”映射时使用它。在这种情况下,您实际上是说一个ID总是有一种颜色,但许多ID可以使用一种颜色。

答案 3 :(得分:0)

如果数组始终排序,您可以使用此algorythm最多250项:

<?php
function getRGBColorString( $array )
{
    $indexColor = round( 250 / count( $array ) );
    $iterator = 1;

    $arrayOfRGB = array();

    foreach( $array as $item)
    {   
        $arrayOfRGB[] = "rgb(" . ( $indexColor * $iterator ) . ", 113, 113 )";
        $iterator++;
    }  

    return $arrayOfRGB;
}

?>