PHP生成RGB

Posted

技术标签:

【中文标题】PHP生成RGB【英文标题】:PHP generate RGB 【发布时间】:2012-02-29 11:00:02 【问题描述】:

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

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

谢谢!

【问题讨论】:

到目前为止你有没有写过代码(或伪代码)? 位分割呢? R的Bit0->Bit7, G的Bit1->Bit7, B的Bit2->Bit7, R的Bit3->Bit6, ...虽然这很复杂,但只要ID空间不一样,它就会给出非常不同的颜色太大了。 【参考方案1】:

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

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

对于数字 0-20,生成的 (code to generate it) 如下所示:

【讨论】:

【参考方案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>

【讨论】:

【参考方案3】:

显而易见的方法是将 ID 转换为颜色(例如,低 8 位是蓝色,接下来的 8 位是绿色,接下来的 8 位是红色 - 保留 8 位,但我相信您可以弄清楚; -)

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

如果您担心 ID 过多,则可以对 ID 应用一些哈希值,并在键入“ID 到颜色”映射时使用它。在这种情况下,您实际上是在说一个 id 始终具有一种颜色,但一种颜色可以被多个 ID 使用。

【讨论】:

【参考方案4】:

如果数组总是排序的,你可以使用这个算法最多 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;


?>

【讨论】:

以上是关于PHP生成RGB的主要内容,如果未能解决你的问题,请参考以下文章

如何生成 RGB 的随机阴影?

JS生成随机颜色(rgb)

php如何生成加粗或者斜体的文字样式图片

使用 XMLHttpRequest 为 RGB 图像生成主色

从 RGB 生成可读的颜色?

RGB-D点云生成