我想将字符串表示为任意html颜色。
示例:
“等等等等” =#FFCC00“ foo foo 2” =#565656
实际的颜色代码是什么,只要是有效的十六进制HTML颜色代码,并且整个光谱都可以很好地表示出来。
我想第一步是在字符串上执行MD5,然后以某种方式将其转换为十六进制颜色代码?
Update:用法示例是在服务器上生成文件请求的可视报告。颜色不必看起来很漂亮,而是使人的大脑可以更轻松地检测数据中的图案等。
感谢指针,这似乎可以胜任工作:
function stringToColorCode($str) {
$code = dechex(crc32($str));
$code = substr($code, 0, 6);
return $code;
}
$str = 'test123';
print '<span style="background-color:#'.stringToColorCode($str).'">'.$str.'</span>';
几乎总是,只使用随机颜色会>]
我建议创建一个(冗长的)颜色列表,这些颜色可以与您的背景一起很好地工作,然后仅将字符串和模数(%)与您的颜色数进行哈希运算即可获得表的索引。
public function colorFromString($string)
{
$colors = [
'#0074D9',
'#7FDBFF',
'#39CCCC',
// this list should be as long as practical to avoid duplicates
];
// generate a partial hash of the string (a full hash is too long for the % operator)
$hash = substr(sha1($string), 0, 10);
// determine the color index
$colorIndex = hexdec($hash) % count($colors);
return $colors[$colorIndex];
}
我同意上面的sje397,完全随机的颜色最终看起来很讨厌。我建议不要选择一长串漂亮的颜色,而是建议选择一个恒定的饱和度+发光值,并根据内容更改色相。要从HSL颜色获得RGB颜色,可以使用类似于http://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB中所述的内容。