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

时间:2010-09-16 06:03:33

标签: php html hash colors

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

示例:

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

实际的颜色代码是什么并不重要,只要它是一个有效的十六进制HTML颜色代码,整个光谱就能很好地表现出来。

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

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

5 个答案:

答案 0 :(得分: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>';

答案 1 :(得分:17)

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

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

答案 2 :(得分:17)

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

这是一个例子(在 http://codepad.viper-7.com 中尝试一些有用的东西,例如https://codepad.remoteinterview.io/ZXBMZWYJFO):

<?php

function hsl2rgb($H, $S, $V) {
    $H *= 6;
    $h = intval($H);
    $H -= $h;
    $V *= 255;
    $m = $V*(1 - $S);
    $x = $V*(1 - $S*(1-$H));
    $y = $V*(1 - $S*$H);
    $a = [[$V, $x, $m], [$y, $V, $m],
          [$m, $V, $x], [$m, $y, $V],
          [$x, $m, $V], [$V, $m, $y]][$h];
    return sprintf("#%02X%02X%02X", $a[0], $a[1], $a[2]);
}

function hue($tstr) {
    return unpack('L', hash('adler32', $tstr, true))[1];
}

$phrase = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.";
$words = [];
foreach (explode(' ', $phrase) as $word)
    $words[hue($word)] = $word;
ksort($words);
foreach ($words as $h => $word) {
    $col = hsl2rgb($h/0xFFFFFFFF, 0.4, 1);
    printf('<span style="color:%s">%s</span> ', $col, $word);
}
?>

答案 3 :(得分:6)

一个班轮:

substr(md5($string), 0, 6);

答案 4 :(得分:0)

我想我非常了解这种愿望。我想要同样的事情。试图获得代表标题的独特背景颜色。我不想自己预先定义任何东西,我想为每个标题获得一个视觉哈希,但是非常漂亮。发现这个做得很好。您可以修改颜色的亮度和返回的颜色的变化。您只需将其测试为您感觉舒适的颜色即可。我认为任何颜色都应该对这项工作有好处,只有亮度才能使它与前景区分开来。

https://mrkmg.com/blog/2012/01/13/php-function-to-generate-a-color-from-a-text-string/

给它一个字符串,最小亮度(0-255)和方差(2-10),它将为你的字符串生成一种颜色。如果经过调整,这个可以给你漂亮的颜色。