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

2022-08-30 17:19:57

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

例:

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

实际的颜色代码是什么并不重要,只要它是有效的十六进制HTML颜色代码并且整个光谱都得到了很好的表示。

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

更新:使用示例是在服务器上生成文件请求的可视报告。颜色不必看起来很漂亮,更多的是人脑可以更容易地检测数据中的模式等。


答案 1

感谢您的指点,这似乎做得很好:

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

答案 2

几乎总是,只要使用随机颜色就会

  1. 看起来很糟糕
  2. 与背景冲突

我建议创建一个(很长的)颜色列表,这些颜色可以很好地协同工作并与您的背景一起工作 - 然后只需将字符串和模量(%)与颜色数量进行哈希处理,即可将索引放入表中。

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

推荐