始终将随机字符串更改为颜色

时间:2013-03-29 13:26:57

标签: php

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

我可以使用MD5(或其他类型的哈希)ID,以便代码可以知道预期会有多少字符,但底线是它必须为相同的ID /散列/字符串生成相同的(随机)颜色。

3 个答案:

答案 0 :(得分:23)

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

<?php
function rgbcode($id){
    return '#'.substr(md5($id), 0, 6);
}
?>

答案 1 :(得分:0)

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

答案 2 :(得分:0)

这是一个简单的功能,我在我自己的一个项目中使用它创建RGB值,我可以使用PHP 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 ) ) );