9

我有一些要为其生成随机颜色的 ID。制作随机颜色不是问题,但必须保持一致。

我可以对 ID 进行 MD5(或某种其他类型的哈希),这样代码就可以知道预期有多少字符,但底线是它必须为相同的 ID/哈希/字符串生成相同的(随机)颜色。

4

3 回答 3

29

RGB 代码所需要的只是从随机字符串到 6 位十六进制值的一致映射。为什么不使用 md5 作为十六进制字符串的一种方式,然后取前 6 位数字?

<?php
function rgbcode($id){
    return '#'.substr(md5($id), 0, 6);
}
?>
于 2013-03-29T14:46:55.627 回答
1

这是我在自己的一个项目中使用的一个简单函数,用于创建可以与 PHP 一起使用的 RGB 值imagecolorallocatealpha

function randomRgbGeneratorFromId( $id = null ) {
    $md5 = md5( $id );
    $md5 = preg_replace( '/[^0-9a-fA-F]/', '', $md5 );
    $color = substr( $md5, 0, 6 );
    $hex = str_split( $color, 1 );
    $rgbd = array_map( 'hexdec', $hex );
    $rgba = array(
        ( $rgbd[0] * $rgbd[1] ),
        ( $rgbd[2] * $rgbd[3] ),
        ( $rgbd[4] * $rgbd[5] ),
    );
    return $rgba;
}

当然,您始终可以使用以下方式输出到您的 CSS / HTML:

  echo sprintf( 'rgb(%s)', implode( ',', randomRgbGeneratorFromId( $id ) ) );
于 2017-10-31T05:26:09.143 回答
0

首先将随机字符串转换为 6 位数的十六进制数,然后删除浮点数并将字符串转换为整数并将它们转换为十六进制字符串,然后在六位十六进制数之前放置一个哈希,该随机字符串有一个颜色,你可能会发现十六进制数大于六位一,如果是这样,继续将该数字除以 2,直到它变成 5 位十六进制数,第六位将是总十六进制数除以 2 的次数,有你的颜色代码。

于 2013-03-29T13:37:49.570 回答