我如何将字符串转换为html颜色代码哈希?

问题描述 投票:17回答:6

我想将字符串表示为任意html颜色。

示例:

“等等等等” =#FFCC00“ foo foo 2” =#565656

实际的颜色代码是什么,只要是有效的十六进制HTML颜色代码,并且整个光谱都可以很好地表示出来。

我想第一步是在字符串上执行MD5,然后以某种方式将其转换为十六进制颜色代码?

Update:用法示例是在服务器上生成文件请求的可视报告。颜色不必看起来很漂亮,而是使人的大脑可以更轻松地检测数据中的图案等。

php html hash colors
6个回答
35
投票

感谢指针,这似乎可以胜任工作:

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>';

21
投票

几乎总是,只使用随机颜色会>]

  1. 看起来不好
  2. 与背景冲突
  3. 我建议创建一个(冗长的)颜色列表,这些颜色可以与您的背景一起很好地工作,然后仅将字符串和模数(%)与您的颜色数进行哈希运算即可获得表的索引。

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];
}

17
投票

我同意上面的sje397,完全随机的颜色最终看起来很讨厌。我建议不要选择一长串漂亮的颜色,而是建议选择一个恒定的饱和度+发光值,并根据内容更改色相。要从HSL颜色获得RGB颜色,可以使用类似于http://en.wikipedia.org/wiki/HSL_and_HSV#Converting_to_RGB中所述的内容。


6
投票
一个班轮:

0
投票
我想我非常了解这个愿望。我想要同样的东西。试图获得代表标题的独特背景色。我不想自己预先定义任何内容,我想为每个标题添加一个视觉哈希,但要漂亮。发现这可以很好地完成工作。您可以修改颜色的亮度及其返回值的变化。您只需测试一下适合的颜色即可。我认为任何颜色都应该适合这项工作,只是亮度要与前景色区分开来。

0
投票
我建议使用此包,这正是您想要的:
© www.soinside.com 2019 - 2024. All rights reserved.