【问题标题】:Hashing strings to Color in C#在 C# 中将字符串散列到颜色
【发布时间】:2011-04-22 16:08:51
【问题描述】:

我不知道散列是否是正确的词,但我想半随机地将字符串转换为十六进制或 argb 颜色。

我使用了 string.GetHasCode 函数,但结果偏向绿色:

string[] list = { "Test String", "something else", "Test Hooray" };

foreach (string k in list)
{
    string x = k.ToUpper().GetHashCode().ToString("X8");
    Console.WriteLine("#" + x.Substring(0,6));
}

理想情况下,我希望以相似前缀开头的字符串具有大不相同的颜色。例如,“Test String”和“Test Hooray”应该完全不同,因为它们都以“Test”开头。

我并不真正担心一个绝对的解决方案,我只是想要一些足够好的东西。 list[] 一次最多将有大约 10 个元素,并且大多数时候只有 2、3 或 4 个。这意味着颜色只需不同于 2 或其他 3 种颜色。

我基本上是在生成一个视觉列表,其中颜色引用了名称,但名称应始终映射到相同的颜色。

编辑:示例输出:

#66BD44
#7EC83E
#95E4FE

颜色:http://www.colorcombos.com/combotester.html?color0=66BD44&color1=7EC83E&color2=95E4FE&color3=000316

【问题讨论】:

  • 根据需要计算哈希值,但将其用作色调而不是 rgb 值,然后使用相同的 S 和 L 将 hsl 转换为 rgb 进行所有转换,然后您将不会得到这么难看的颜色。

标签: c# colors


【解决方案1】:

string 不只是使用objectGetHashCode(),它从引用中返回内存地址吗?这可以解释为什么您的所有代码都倾向于特定的频谱。这也意味着颜色在运行之间不是确定性的,因为内存位置会不同。

您可能应该做的是使用一种加密散列函数,如 SHA1,然后从每个字符串中选择一个(相同的)随机 3 字节部分。

编辑 System.String.GetHashCode() 循环遍历字符串,并对字符串中包含的字符执行数学运算(我目前还不够警觉,无法进行数学运算……)。这允许哈希码始终相同,但它也解释了为什么“Test String”和“Test Hooray”会产生非常相似的颜色——它的设计初衷不是安全,只是可重复。

【讨论】:

  • System.String 使用 Object.GetHashCode() 实现。它将哈希码确定为字符串中字符的组合,否则不同内存位置的 2 个字符串不会生成相同的哈希码。
  • 我刚刚在 Reflector 中找到了它。我现在要更新我的帖子。
  • String.GetHashCode() 旨在在 Int32 空间上的分布均匀性、相同字符序列的可重复性和生成速度之间提供良好的折衷。
【解决方案2】:

简单的解决方案:遍历您的字符串,将单个字符的 ascii 值(或 unicode,如果您愿意)相加。你最终会得到一些整数; % 将其转换为所需的位数(例如 6)并将结果分成 3 个分量(r、g、b)。根据需要进行乘法或位移,以确保覆盖 RGB 色彩空间的全部范围。

【讨论】:

    【解决方案3】:

    我不认为你的理想解决方案是一致的,因为我认为确保具有相似前缀的字符串在颜色空间中相距很远的唯一方法是拥有一个依赖于现有散列值的映射,这意味着它赢了'不一致。

    考虑极端情况,您有 2^24 个以“Test”开头的字符串...

    不过,这个问题很有趣。现在的地图有多环保? (我想不出为什么会这样)。

    【讨论】:

    • rgb 值只有这么多,所以会出现一定程度的重复,但如果我能走出绿色光谱,那会有所帮助。我添加了颜色链接,以便您可以看到绿色。
    【解决方案4】:

    我会使用 MD5 哈希:

    http://msdn.microsoft.com/de-de/library/system.security.cryptography.md5.aspx

    从原始序列中更改一个字符会完全“打乱” md5 序列。对于“md5-to-color”-mapping 只需删减一些位。

    【讨论】:

      【解决方案5】:

      我认为您的实现偏向绿色,因为您使用的 gamut 偏向绿色。

      【讨论】:

        【解决方案6】:

        对于某个值 N(例如 N=10 或 N=100),使用散列算法将您的人口散列到 N 个桶中(例如 GetHashCode() modulo 10)。将该值用作 N 颜色表的索引。然后为您的索引表选择 N 种不同的颜色。

        【讨论】:

          【解决方案7】:

          以下基于 Wang/Jenkins 的重新散列代码有助于改善位分布:

                  private static int ReHash(int srcHash)
                  {
                      unchecked
                      {
                          uint h = (uint)srcHash;
                          h += (h << 15) ^ 0xffffcd7d;
                          h ^= (h >> 10);
                          h += (h << 3);
                          h ^= (h >> 6);
                          h += (h << 2) + (h << 14);
                          return (int)(h ^ (h >> 16));
                      }
                  }
          

          但是,颜色在视觉上的分布可能仍然不太好。 RGB 系统以某种偏斜的方式分割颜色,我们的眼睛不会像 RGB 代码那样处理颜色。

          【讨论】:

          • 然后计算一个色调,将其转换为 rgb。还有一个额外的好处是你不会得到太亮而无法在背景中阅读的颜色。
          • @Mark,这也带来了自己的问题,但可能是真正要走的路。也就是说,如果 Nathan 的基于 MD5 的方法运行良好,那么希望这也能减少开销。
          【解决方案8】:

          创建字符串的MD5 哈希,并将前三个字节分别作为红色、绿色和蓝色分量。

          以下演示产生了合理的颜色分布。

          var words = ("She sells sea shells on the sea shore but the sea " +
                       "shells she sells are sea shells no more.").Split(' ');
          var md5 = MD5.Create();
          var box = new ListBox
              {
                  Dock = DockStyle.Fill,
                  DrawMode = DrawMode.OwnerDrawFixed
              };
          box.Items.AddRange(words);
          box.DrawItem += (sender, e) =>
              {
                  var value = (string) box.Items[e.Index];
                  var hash = md5.ComputeHash(Encoding.UTF8.GetBytes(value));
                  var color = Color.FromArgb(hash[0], hash[1], hash[2]);
                  using (var backBrush = new SolidBrush(color))
                  using (var foreBrush = new SolidBrush(e.ForeColor))
                  {
                      e.Graphics.FillRectangle(backBrush, e.Bounds);
                      e.Graphics.DrawString(value, e.Font, foreBrush, e.Bounds);
                  }
                  e.DrawFocusRectangle();
              };
          new Form {Controls = {box}}.ShowDialog();
          

          【讨论】:

          • 谢谢!图片说一千个字,与 imgur 的新 SO 集成使插入屏幕截图变得更容易。
          • 这段代码中有什么东西可以确保合理的颜色值/亮度吗?为什么没有真正的深色或真正的浅色?
          • @naught101 基本统计。你有三个独立的渠道,每个渠道都均匀分布;整体亮度分布曲线将类似于 3d256,例如 anydice.com/program/df1c(当然,忽略每个通道对感知亮度的权重不同)。
          【解决方案9】:

          编辑:该死..超出了我的字符数限制.. 无论如何,这是用 PHP 编写的,但您可以轻松地将其转换为 C#。它需要一个字符串并返回一个色调以用作您的颜色..您可以自己决定饱和度和亮度(我建议保持一致)。这些数字不是随机的,它们均匀分布在英语词典中('a' 的范围更大,因为更多的单词以'a' 开头,同样,没有多少单词以'x' 开头,所以只分配了几个色调给它)

          <?php
          // first letter
          $s2h1['a'] = 0;
          $s2h1['b'] = 24.0006119483;
          $s2h1['c'] = 45.2658150386;
          $s2h1['d'] = 80.9852367475;
          $s2h1['e'] = 96.5807389276;
          $s2h1['f'] = 108.9573931;
          $s2h1['g'] = 126.34284403;
          $s2h1['h'] = 150.8544328;
          $s2h1['i'] = 165.473877457;
          $s2h1['j'] = 174.374665341;
          $s2h1['k'] = 179.306968561;
          $s2h1['l'] = 183.679339096;
          $s2h1['m'] = 197.864300467;
          $s2h1['n'] = 218.875545016;
          $s2h1['o'] = 227.351028838;
          $s2h1['p'] = 235.91218542;
          $s2h1['q'] = 264.621739463;
          $s2h1['r'] = 266.081236136;
          $s2h1['s'] = 280.621127515;
          $s2h1['t'] = 319.660368699;
          $s2h1['u'] = 337.783217318;
          $s2h1['v'] = 341.427369387;
          $s2h1['w'] = 347.335730131;
          $s2h1['x'] = 357.00757286;
          $s2h1['y'] = 357.509370458;
          $s2h1['z'] = 358.901552819;
          $s2h1['{'] = 360;
          // second letter
          $s2h2['a']['a'] = 0;
          $s2h2['a']['b'] = 0.143807848237;
          $s2h2['a']['c'] = 1.15046278589;
          $s2h2['a']['d'] = 3.16377266121;
          $s2h2['a']['e'] = 4.3142354471;
          $s2h2['a']['f'] = 4.69364338713;
          $s2h2['a']['g'] = 5.14342538056;
          $s2h2['a']['h'] = 5.81962824141;
          $s2h2['a']['i'] = 5.85634513884;
          $s2h2['a']['j'] = 6.45299472195;
          $s2h2['a']['k'] = 6.47747265356;
          $s2h2['a']['l'] = 6.55702593131;
          $s2h2['a']['m'] = 9.49743746653;
          $s2h2['a']['n'] = 11.2904459573;
          $s2h2['a']['o'] = 15.0080318213;
          $s2h2['a']['p'] = 15.0478084602;
          $s2h2['a']['q'] = 16.109538744;
          $s2h2['a']['r'] = 16.2472271093;
          $s2h2['a']['s'] = 19.4385374436;
          $s2h2['a']['t'] = 20.9286315306;
          $s2h2['a']['u'] = 22.1800657844;
          $s2h2['a']['v'] = 23.4009026237;
          $s2h2['a']['w'] = 23.6518014228;
          $s2h2['a']['x'] = 23.700757286;
          $s2h2['a']['y'] = 23.8017287539;
          $s2h2['a']['z'] = 23.8568041001;
          $s2h2['b']['a'] = 0;
          $s2h2['b']['b'] = 5.03021494684;
          $s2h2['b']['c'] = 5.0455136541;
          $s2h2['b']['d'] = 5.0455136541;
          $s2h2['b']['e'] = 5.051633137;
          $s2h2['b']['f'] = 8.01040312094;
          $s2h2['b']['g'] = 8.01040312094;
          $s2h2['b']['h'] = 8.01040312094;
          $s2h2['b']['i'] = 8.05323950126;
          $s2h2['b']['j'] = 10.0390117035;
          $s2h2['b']['k'] = 10.0451311864;
          $s2h2['b']['l'] = 10.0481909279;
          $s2h2['b']['m'] = 12.5938958158;
          $s2h2['b']['n'] = 12.6091945231;
          $s2h2['b']['o'] = 12.6122542645;
          $s2h2['b']['p'] = 15.6689359749;
          $s2h2['b']['q'] = 15.6811749407;
          $s2h2['b']['r'] = 15.6811749407;
          $s2h2['b']['s'] = 18.7133787195;
          $s2h2['b']['t'] = 18.7225579439;
          $s2h2['b']['u'] = 18.7256176853;
          $s2h2['b']['v'] = 21.1183355007;
          $s2h2['b']['w'] = 21.1244549836;
          $s2h2['b']['x'] = 21.1366939494;
          $s2h2['b']['y'] = 21.1366939494;
          $s2h2['b']['z'] = 21.2652030903;
          $s2h2['c']['a'] = 0;
          $s2h2['c']['b'] = 8.33779545628;
          $s2h2['c']['c'] = 8.34391493919;
          $s2h2['c']['d'] = 8.35003442209;
          $s2h2['c']['e'] = 8.39899028532;
          $s2h2['c']['f'] = 10.2409546393;
          $s2h2['c']['g'] = 10.2531936051;
          $s2h2['c']['h'] = 10.259313088;
          $s2h2['c']['i'] = 15.724011321;
          $s2h2['c']['j'] = 16.9295494531;
          $s2h2['c']['k'] = 16.9326091945;
          $s2h2['c']['l'] = 16.9326091945;
          $s2h2['c']['m'] = 19.4171192534;
          $s2h2['c']['n'] = 19.4293582192;
          $s2h2['c']['o'] = 19.4905530483;
          $s2h2['c']['p'] = 30.4444274459;
          $s2h2['c']['q'] = 30.4627858946;
          $s2h2['c']['r'] = 30.4627858946;
          $s2h2['c']['s'] = 33.1094622504;
          $s2h2['c']['t'] = 33.1247609577;
          $s2h2['c']['u'] = 33.1645375966;
          $s2h2['c']['v'] = 34.6454524593;
          $s2h2['c']['w'] = 34.6515719422;
          $s2h2['c']['x'] = 34.6576914251;
          $s2h2['c']['y'] = 34.6576914251;
          $s2h2['c']['z'] = 35.6674061042;
          $s2h2['d']['a'] = 0;
          $s2h2['d']['b'] = 2.00107090951;
          $s2h2['d']['c'] = 2.01025013386;
          $s2h2['d']['d'] = 2.01942935822;
          $s2h2['d']['e'] = 2.03472806548;
          $s2h2['d']['f'] = 6.36732196129;
          $s2h2['d']['g'] = 6.37038170275;
          $s2h2['d']['h'] = 6.3734414442;
          $s2h2['d']['i'] = 6.43463627323;
          $s2h2['d']['j'] = 10.4245391264;
          $s2h2['d']['k'] = 10.4520767995;
          $s2h2['d']['l'] = 10.4612560239;
          $s2h2['d']['m'] = 10.4673755068;
          $s2h2['d']['n'] = 10.4979729213;
          $s2h2['d']['o'] = 10.5224508529;
          $s2h2['d']['p'] = 12.6459114205;
          $s2h2['d']['q'] = 12.6612101277;
          $s2h2['d']['r'] = 12.6612101277;
          $s2h2['d']['s'] = 14.1757821464;
          $s2h2['d']['t'] = 14.1849613708;
          $s2h2['d']['u'] = 14.1910808537;
          $s2h2['d']['v'] = 15.1701981183;
          $s2h2['d']['w'] = 15.1763176012;
          $s2h2['d']['x'] = 15.3384838981;
          $s2h2['d']['y'] = 15.3384838981;
          $s2h2['d']['z'] = 15.5924424386;
          $s2h2['e']['a'] = 0;
          $s2h2['e']['b'] = 0.81083148474;
          $s2h2['e']['c'] = 0.902623728295;
          $s2h2['e']['d'] = 1.44113822382;
          $s2h2['e']['e'] = 2.02860858257;
          $s2h2['e']['f'] = 2.06532548;
          $s2h2['e']['g'] = 2.18771513807;
          $s2h2['e']['h'] = 2.45391264438;
          $s2h2['e']['i'] = 2.46615161019;
          $s2h2['e']['j'] = 2.63443739004;
          $s2h2['e']['k'] = 2.65891532166;
          $s2h2['e']['l'] = 2.66809454601;
          $s2h2['e']['m'] = 4.40908743211;
          $s2h2['e']['n'] = 5.12506693184;
          $s2h2['e']['o'] = 6.61822076035;
          $s2h2['e']['p'] = 6.66717662358;
          $s2h2['e']['q'] = 7.37397689895;
          $s2h2['e']['r'] = 7.67077181978;
          $s2h2['e']['s'] = 8.43876692419;
          $s2h2['e']['t'] = 8.97116193682;
          $s2h2['e']['u'] = 9.34445039394;
          $s2h2['e']['v'] = 10.3725235218;
          $s2h2['e']['w'] = 10.6968561157;
          $s2h2['e']['x'] = 10.7182743058;
          $s2h2['e']['y'] = 12.134934598;
          $s2h2['e']['z'] = 12.3460567582;
          $s2h2['f']['a'] = 0;
          $s2h2['f']['b'] = 5.7125372906;
          $s2h2['f']['c'] = 5.7186567735;
          $s2h2['f']['d'] = 5.72477625641;
          $s2h2['f']['e'] = 5.73395548076;
          $s2h2['f']['f'] = 7.17815344603;
          $s2h2['f']['g'] = 7.17815344603;
          $s2h2['f']['h'] = 7.17815344603;
          $s2h2['f']['i'] = 7.18427292894;
          $s2h2['f']['j'] = 9.9380402356;
          $s2h2['f']['k'] = 9.94109997705;
          $s2h2['f']['l'] = 9.94109997705;
          $s2h2['f']['m'] = 11.884035799;
          $s2h2['f']['n'] = 11.8901552819;
          $s2h2['f']['o'] = 11.8932150233;
          $s2h2['f']['p'] = 14.0258548153;
          $s2h2['f']['q'] = 14.0319742982;
          $s2h2['f']['r'] = 14.0319742982;
          $s2h2['f']['s'] = 16.3543180601;
          $s2h2['f']['t'] = 16.360437543;
          $s2h2['f']['u'] = 16.3787959917;
          $s2h2['f']['v'] = 17.3640327392;
          $s2h2['f']['w'] = 17.3640327392;
          $s2h2['f']['x'] = 17.3670924807;
          $s2h2['f']['y'] = 17.3670924807;
          $s2h2['f']['z'] = 17.3854509294;
          $s2h2['g']['a'] = 0;
          $s2h2['g']['b'] = 2.41719574696;
          $s2h2['g']['c'] = 2.42637497131;
          $s2h2['g']['d'] = 2.43555419567;
          $s2h2['g']['e'] = 2.44473342003;
          $s2h2['g']['f'] = 15.5587852826;
          $s2h2['g']['g'] = 15.5587852826;
          $s2h2['g']['h'] = 15.5587852826;
          $s2h2['g']['i'] = 15.6566970091;
          $s2h2['g']['j'] = 16.5929778934;
          $s2h2['g']['k'] = 16.5960376348;
          $s2h2['g']['l'] = 16.5960376348;
          $s2h2['g']['m'] = 17.6302302455;
          $s2h2['g']['n'] = 17.6363497284;
          $s2h2['g']['o'] = 17.7250822306;
          $s2h2['g']['p'] = 19.5456283944;
          $s2h2['g']['q'] = 19.5609271017;
          $s2h2['g']['r'] = 19.5609271017;
          $s2h2['g']['s'] = 22.9235829572;
          $s2h2['g']['t'] = 22.9327621816;
          $s2h2['g']['u'] = 22.9327621816;
          $s2h2['g']['v'] = 24.1811366939;
          $s2h2['g']['w'] = 24.1811366939;
          $s2h2['g']['x'] = 24.1903159183;
          $s2h2['g']['y'] = 24.1903159183;
          $s2h2['g']['z'] = 24.5115887707;
          $s2h2['h']['a'] = 0;
          $s2h2['h']['b'] = 3.60437543028;
          $s2h2['h']['c'] = 3.60743517173;
          $s2h2['h']['d'] = 3.61355465463;
          $s2h2['h']['e'] = 3.62273387899;
          $s2h2['h']['f'] = 7.0465845636;
          $s2h2['h']['g'] = 7.05270404651;
          $s2h2['h']['h'] = 7.05576378796;
          $s2h2['h']['i'] = 7.05882352941;
          $s2h2['h']['j'] = 8.45712537291;
          $s2h2['h']['k'] = 8.45712537291;
          $s2h2['h']['l'] = 8.45712537291;
          $s2h2['h']['m'] = 8.46018511436;
          $s2h2['h']['n'] = 8.47548382162;
          $s2h2['h']['o'] = 8.48160330452;
          $s2h2['h']['p'] = 11.7402279507;
          $s2h2['h']['q'] = 11.7432876922;
          $s2h2['h']['r'] = 11.7463474336;
          $s2h2['h']['s'] = 11.7616461409;
          $s2h2['h']['t'] = 11.789183814;
          $s2h2['h']['u'] = 11.7983630383;
          $s2h2['h']['v'] = 12.8417348734;
          $s2h2['h']['w'] = 12.8417348734;
          $s2h2['h']['x'] = 12.8447946149;
          $s2h2['h']['y'] = 12.8447946149;
          $s2h2['h']['z'] = 14.6163849155;
          $s2h2['i']['a'] = 0;
          $s2h2['i']['b'] = 0.100971467911;
          $s2h2['i']['c'] = 0.171345521303;
          $s2h2['i']['d'] = 0.559932685688;
          $s2h2['i']['e'] = 0.847548382162;
          $s2h2['i']['f'] = 0.856727606517;
          $s2h2['i']['g'] = 0.859787347969;
          $s2h2['i']['h'] = 1.01889390347;
          $s2h2['i']['i'] = 1.01889390347;
          $s2h2['i']['j'] = 1.06173028379;
          $s2h2['i']['k'] = 1.0739692496;
          $s2h2['i']['l'] = 1.08314847395;
          $s2h2['i']['m'] = 1.37994339478;
          $s2h2['i']['n'] = 2.3131645376;
          $s2h2['i']['o'] = 7.03740533925;
          $s2h2['i']['p'] = 7.2056911191;
          $s2h2['i']['q'] = 7.28524439685;
          $s2h2['i']['r'] = 7.29136387975;
          $s2h2['i']['s'] = 7.94002906754;
          $s2h2['i']['t'] = 8.5336189092;
          $s2h2['i']['u'] = 8.68966572325;
          $s2h2['i']['v'] = 8.6927254647;
          $s2h2['i']['w'] = 8.81511512277;
          $s2h2['i']['x'] = 8.82735408858;
          $s2h2['i']['y'] = 8.87325021036;
          $s2h2['i']['z'] = 8.87936969326;
          $s2h2['j']['a'] = 0;
          $s2h2['j']['b'] = 1.59106555496;
          $s2h2['j']['c'] = 1.59106555496;
          $s2h2['j']['d'] = 1.59106555496;
          $s2h2['j']['e'] = 1.59412529641;
          $s2h2['j']['f'] = 2.28868660598;
          $s2h2['j']['g'] = 2.29174634743;
          $s2h2['j']['h'] = 2.29174634743;
          $s2h2['j']['i'] = 2.29480608889;
          $s2h2['j']['j'] = 2.49980876616;
          $s2h2['j']['k'] = 2.49980876616;
          $s2h2['j']['l'] = 2.49980876616;
          $s2h2['j']['m'] = 2.49980876616;
          $s2h2['j']['n'] = 2.49980876616;
          $s2h2['j']['o'] = 2.50592824906;
          $s2h2['j']['p'] = 3.92870802417;
          $s2h2['j']['q'] = 3.92870802417;
          $s2h2['j']['r'] = 3.92870802417;
          $s2h2['j']['s'] = 3.93482750708;
          $s2h2['j']['t'] = 3.93482750708;
          $s2h2['j']['u'] = 3.93482750708;
          $s2h2['j']['v'] = 4.92006425457;
          $s2h2['j']['w'] = 4.92312399602;
          $s2h2['j']['x'] = 4.92312399602;
          $s2h2['j']['y'] = 4.92312399602;
          $s2h2['j']['z'] = 4.93230322038;
          $s2h2['k']['a'] = 0;
          $s2h2['k']['b'] = 0.991356230399;
          $s2h2['k']['c'] = 1.00053545475;
          $s2h2['k']['d'] = 1.00359519621;
          $s2h2['k']['e'] = 1.00359519621;
          $s2h2['k']['f'] = 1.75017211046;
          $s2h2['k']['g'] = 1.75017211046;
          $s2h2['k']['h'] = 1.75629159336;
          $s2h2['k']['i'] = 1.89703970015;
          $s2h2['k']['j'] = 2.94959075958;
          $s2h2['k']['k'] = 2.94959075958;
          $s2h2['k']['l'] = 2.95265050103;
          $s2h2['k']['m'] = 3.0689206762;
          $s2h2['k']['n'] = 3.07504015911;
          $s2h2['k']['o'] = 3.45444809914;
          $s2h2['k']['p'] = 3.83997552207;
          $s2h2['k']['q'] = 3.84609500497;
          $s2h2['k']['r'] = 3.84609500497;
          $s2h2['k']['s'] = 3.98684311176;
          $s2h2['k']['t'] = 3.99296259466;
          $s2h2['k']['u'] = 3.99602233611;
          $s2h2['k']['v'] = 4.24692113516;
          $s2h2['k']['w'] = 4.25610035952;
          $s2h2['k']['x'] = 4.3142354471;
          $s2h2['k']['y'] = 4.3142354471;
          $s2h2['k']['z'] = 4.37237053469;
          $s2h2['l']['a'] = 0;
          $s2h2['l']['b'] = 3.72676508835;
          $s2h2['l']['c'] = 3.73594431271;
          $s2h2['l']['d'] = 3.74206379561;
          $s2h2['l']['e'] = 3.75124301996;
          $s2h2['l']['f'] = 6.60904153599;
          $s2h2['l']['g'] = 6.61210127744;
          $s2h2['l']['h'] = 6.61822076035;
          $s2h2['l']['i'] = 6.63045972615;
          $s2h2['l']['j'] = 9.86460644076;
          $s2h2['l']['k'] = 9.86766618221;
          $s2h2['l']['l'] = 9.86766618221;
          $s2h2['l']['m'] = 9.90744282108;
          $s2h2['l']['n'] = 9.91050256253;
          $s2h2['l']['o'] = 9.91050256253;
          $s2h2['l']['p'] = 12.5541191769;
          $s2h2['l']['q'] = 12.5602386598;
          $s2h2['l']['r'] = 12.5602386598;
          $s2h2['l']['s'] = 12.5632984013;
          $s2h2['l']['t'] = 12.5663581427;
          $s2h2['l']['u'] = 12.5755373671;
          $s2h2['l']['v'] = 13.5454754073;
          $s2h2['l']['w'] = 13.5454754073;
          $s2h2['l']['x'] = 13.5485351488;
          $s2h2['l']['y'] = 13.5607741146;
          $s2h2['l']['z'] = 14.1849613708;
          $s2h2['m']['a'] = 0;
          $s2h2['m']['b'] = 7.08024171957;
          $s2h2['m']['c'] = 7.10165990974;
          $s2h2['m']['d'] = 7.17203396313;
          $s2h2['m']['e'] = 7.18427292894;
          $s2h2['m']['f'] = 10.9844718121;
          $s2h2['m']['g'] = 10.9936510365;
          $s2h2['m']['h'] = 10.9967107779;
          $s2h2['m']['i'] = 11.0028302608;
          $s2h2['m']['j'] = 14.2553354242;
          $s2h2['m']['k'] = 14.2553354242;
          $s2h2['m']['l'] = 14.2583951656;
          $s2h2['m']['m'] = 14.26757439;
          $s2h2['m']['n'] = 14.2767536143;
          $s2h2['m']['o'] = 14.2981718045;
          $s2h2['m']['p'] = 18.107549912;
          $s2h2['m']['q'] = 18.1197888778;
          $s2h2['m']['r'] = 18.1197888778;
          $s2h2['m']['s'] = 18.1595655167;
          $s2h2['m']['t'] = 18.1901629312;
          $s2h2['m']['u'] = 18.2238200872;
          $s2h2['m']['v'] = 20.2126520309;
          $s2h2['m']['w'] = 20.2187715138;
          $s2h2['m']['x'] = 20.2248909967;
          $s2h2['m']['y'] = 20.2279507382;
          $s2h2['m']['z'] = 21.0112445498;
          $s2h2['n']['a'] = 0;
          $s2h2['n']['b'] = 1.80218771514;
          $s2h2['n']['c'] = 1.81136693949;
          $s2h2['n']['d'] = 1.8174864224;
          $s2h2['n']['e'] = 1.82666564675;
          $s2h2['n']['f'] = 4.31117570565;
          $s2h2['n']['g'] = 4.31117570565;
          $s2h2['n']['h'] = 4.34789260308;
          $s2h2['n']['i'] = 4.35095234453;
          $s2h2['n']['j'] = 5.44022030138;
          $s2h2['n']['k'] = 5.44939952574;
          $s2h2['n']['l'] = 5.44939952574;
          $s2h2['n']['m'] = 5.45551900864;
          $s2h2['n']['n'] = 5.46163849155;
          $s2h2['n']['o'] = 5.4708177159;
          $s2h2['n']['p'] = 7.46576914251;
          $s2h2['n']['q'] = 7.47494836686;
          $s2h2['n']['r'] = 7.47494836686;
          $s2h2['n']['s'] = 7.49942629848;
          $s2h2['n']['t'] = 7.52084448864;
          $s2h2['n']['u'] = 7.52696397154;
          $s2h2['n']['v'] = 8.27048114434;
          $s2h2['n']['w'] = 8.2735408858;
          $s2h2['n']['x'] = 8.28272011015;
          $s2h2['n']['y'] = 8.28272011015;
          $s2h2['n']['z'] = 8.47548382162;
          $s2h2['o']['a'] = 0;
          $s2h2['o']['b'] = 0.146867589689;
          $s2h2['o']['c'] = 0.581350875851;
          $s2h2['o']['d'] = 1.00971467911;
          $s2h2['o']['e'] = 1.19635890767;
          $s2h2['o']['f'] = 1.3218083072;
          $s2h2['o']['g'] = 1.51763176012;
          $s2h2['o']['h'] = 1.55434865754;
          $s2h2['o']['i'] = 1.59106555496;
          $s2h2['o']['j'] = 1.78994874933;
          $s2h2['o']['k'] = 1.79912797369;
          $s2h2['o']['l'] = 1.86338254418;
          $s2h2['o']['m'] = 2.54570488794;
          $s2h2['o']['n'] = 2.71705040924;
          $s2h2['o']['o'] = 3.17907136847;
          $s2h2['o']['p'] = 3.23720645605;
          $s2h2['o']['q'] = 3.98378337031;
          $s2h2['o']['r'] = 3.98378337031;
          $s2h2['o']['s'] = 6.44381549759;
          $s2h2['o']['t'] = 6.93031438843;
          $s2h2['o']['u'] = 7.15367551442;
          $s2h2['o']['v'] = 7.52696397154;
          $s2h2['o']['w'] = 8.06853820852;
          $s2h2['o']['x'] = 8.11749407175;
          $s2h2['o']['y'] = 8.42958769984;
          $s2h2['o']['z'] = 8.49690201178;
          $s2h2['p']['a'] = 0;
          $s2h2['p']['b'] = 5.18014227798;
          $s2h2['p']['c'] = 5.18932150233;
          $s2h2['p']['d'] = 5.20156046814;
          $s2h2['p']['e'] = 5.21379943395;
          $s2h2['p']['f'] = 9.11802952651;
          $s2h2['p']['g'] = 9.13638797522;
          $s2h2['p']['h'] = 9.13638797522;
          $s2h2['p']['i'] = 11.3638797522;
          $s2h2['p']['j'] = 14.1207068003;
          $s2h2['p']['k'] = 14.1237665417;
          $s2h2['p']['l'] = 14.1329457661;
          $s2h2['p']['m'] = 16.2533465922;
          $s2h2['p']['n'] = 16.2594660751;
          $s2h2['p']['o'] = 16.3359596114;
          $s2h2['p']['p'] = 20.6960911803;
          $s2h2['p']['q'] = 20.7052704047;
          $s2h2['p']['r'] = 20.7052704047;
          $s2h2['p']['s'] = 25.5916775033;
          $s2h2['p']['t'] = 26.2434024325;
          $s2h2['p']['u'] = 26.5065401974;
          $s2h2['p']['v'] = 28.149621357;
          $s2h2['p']['w'] = 28.1557408399;
          $s2h2['p']['x'] = 28.1588005814;
          $s2h2['p']['y'] = 28.1618603228;
          $s2h2['p']['z'] = 28.7095540427;
          $s2h2['q']['a'] = 0;
          $s2h2['q']['b'] = 0.0611948290369;
          $s2h2['q']['c'] = 0.0611948290369;
          $s2h2['q']['d'] = 0.0642545704888;
          $s2h2['q']['e'] = 0.0642545704888;
          $s2h2['q']['f'] = 0.0703740533925;
          $s2h2['q']['g'] = 0.0703740533925;
          $s2h2['q']['h'] = 0.0703740533925;
          $s2h2['q']['i'] = 0.0703740533925;
          $s2h2['q']['j'] = 0.107090950815;
          $s2h2['q']['k'] = 0.107090950815;
          $s2h2['q']['l'] = 0.107090950815;
          $s2h2['q']['m'] = 0.107090950815;
          $s2h2['q']['n'] = 0.107090950815;
          $s2h2['q']['o'] = 0.107090950815;
          $s2h2['q']['p'] = 0.110150692267;
          $s2h2['q']['q'] = 0.110150692267;
          $s2h2['q']['r'] = 0.110150692267;
          $s2h2['q']['s'] = 0.110150692267;
          $s2h2['q']['t'] = 0.110150692267;
          $s2h2['q']['u'] = 0.110150692267;
          $s2h2['q']['v'] = 1.45643693108;
          $s2h2['q']['w'] = 1.45643693108;
          $s2h2['q']['x'] = 1.45949667253;
          $s2h2['q']['y'] = 1.45949667253;
          $s2h2['q']['z'] = 1.45949667253;
          $s2h2['r']['a'] = 0;
          $s2h2['r']['b'] = 2.75988678957;
          $s2h2['r']['c'] = 2.76906601392;
          $s2h2['r']['d'] = 2.77212575537;
          $s2h2['r']['e'] = 2.77212575537;
          $s2h2['r']['f'] = 8.24294347128;
          $s2h2['r']['g'] = 8.24906295418;
          $s2h2['r']['h'] = 8.25212269563;
          $s2h2['r']['i'] = 8.95892297101;
          $s2h2['r']['j'] = 10.4765547311;
          $s2h2['r']['k'] = 10.4765547311;
          $s2h2['r']['l'] = 10.4765547311;
          $s2h2['r']['m'] = 10.4765547311;
          $s2h2['r']['n'] = 10.4765547311;
          $s2h2['r']['o'] = 10.4887936969;
          $s2h2['r']['p'] = 13.279277901;
          $s2h2['r']['q'] = 13.2853973839;
          $s2h2['r']['r'] = 13.2853973839;
          $s2h2['r']['s'] = 13.2853973839;
          $s2h2['r']['t'] = 13.2853973839;
          $s2h2['r']['u'] = 13.2884571254;
          $s2h2['r']['v'] = 14.4695173258;
          $s2h2['r']['w'] = 14.4725770672;
          $s2h2['r']['x'] = 14.484816033;
          $s2h2['r']['y'] = 14.484816033;
          $s2h2['r']['z'] = 14.5398913792;
          $s2h2['s']['a'] = 0;
          $s2h2['s']['b'] = 4.55901476325;
          $s2h2['s']['c'] = 4.57125372906;
          $s2h2['s']['d'] = 7.2883041383;
          $s2h2['s']['e'] = 7.29136387975;
          $s2h2['s']['f'] = 11.911573472;
          $s2h2['s']['g'] = 11.9176929549;
          $s2h2['s']['h'] = 11.9299319208;
          $s2h2['s']['i'] = 14.6745200031;
          $s2h2['s']['j'] = 17.7250822306;
          $s2h2['s']['k'] = 17.728141972;
          $s2h2['s']['l'] = 18.364568194;
          $s2h2['s']['m'] = 19.3467452;
          $s2h2['s']['n'] = 19.9464545246;
          $s2h2['s']['o'] = 20.6379560927;
          $s2h2['s']['p'] = 23.6212040083;
          $s2h2['s']['q'] = 27.0266962442;
          $s2h2['s']['r'] = 27.4214028915;
          $s2h2['s']['s'] = 27.4428210816;
          $s2h2['s']['t'] = 27.4642392718;
          $s2h2['s']['u'] = 33.2043142354;
          $s2h2['s']['v'] = 36.9647364798;
          $s2h2['s']['w'] = 36.9922741528;
          $s2h2['s']['x'] = 38.1213187486;
          $s2h2['s']['y'] = 38.1213187486;
          $s2h2['s']['z'] = 39.0208827354;
          $s2h2['t']['a'] = 0;
          $s2h2['t']['b'] = 2.78742446263;
          $s2h2['t']['c'] = 2.79660368699;
          $s2h2['t']['d'] = 2.8210816186;
          $s2h2['t']['e'] = 2.82414136006;
          $s2h2['t']['f'] = 5.5473112522;
          $s2h2['t']['g'] = 5.5473112522;
          $s2h2['t']['h'] = 5.5473112522;
          $s2h2['t']['i'] = 8.23376424692;
          $s2h2['t']['j'] = 9.73303755833;
          $s2h2['t']['k'] = 9.73915704123;
          $s2h2['t']['l'] = 9.74221678268;
          $s2h2['t']['m'] = 9.75139600704;
          $s2h2['t']['n'] = 9.75751548994;
          $s2h2['t']['o'] = 9.7666947143;
          $s2h2['t']['p'] = 11.9238124378;
          $s2h2['t']['q'] = 11.9268721793;
          $s2h2['t']['r'] = 11.9268721793;
          $s2h2['t']['s'] = 15.9014763253;
          $s2h2['t']['t'] = 15.9840893445;
          $s2h2['t']['u'] = 15.9871490859;
          $s2h2['t']['v'] = 17.2661210128;
          $s2h2['t']['w'] = 17.315076876;
          $s2h2['t']['x'] = 17.728141972;
          $s2h2['t']['y'] = 17.7312017135;
          $s2h2['t']['z'] = 18.107549912;
          $s2h2['u']['a'] = 0;
          $s2h2['u']['b'] = 0.0734337948443;
          $s2h2['u']['c'] = 0.0917922435554;
          $s2h2['u']['d'] = 0.0948519850073;
          $s2h2['u']['e'] = 0.107090950815;
          $s2h2['u']['f'] = 0.107090950815;
          $s2h2['u']['g'] = 0.113210433718;
          $s2h2['u']['h'] = 0.149927331141;
          $s2h2['u']['i'] = 0.156046814044;
          $s2h2['u']['j'] = 0.171345521303;
          $s2h2['u']['k'] = 0.171345521303;
          $s2h2['u']['l'] = 0.19888319437;
          $s2h2['u']['m'] = 0.462020959229;
          $s2h2['u']['n'] = 0.59664958311;
          $s2h2['u']['o'] = 2.3254035034;
          $s2h2['u']['p'] = 2.3254035034;
          $s2h2['u']['q'] = 2.63137764859;
          $s2h2['u']['r'] = 2.63137764859;
          $s2h2['u']['s'] = 3.15459343685;
          $s2h2['u']['t'] = 3.40855197736;
          $s2h2['u']['u'] = 3.5645987914;
          $s2h2['u']['v'] = 3.57989749866;
          $s2h2['u']['w'] = 3.61049491318;
          $s2h2['u']['x'] = 3.61049491318;
          $s2h2['u']['y'] = 3.62273387899;
          $s2h2['u']['z'] = 3.62579362044;
          $s2h2['v']['a'] = 0;
          $s2h2['v']['b'] = 1.33098753155;
          $s2h2['v']['c'] = 1.33098753155;
          $s2h2['v']['d'] = 1.33404727301;
          $s2h2['v']['e'] = 1.34016675591;
          $s2h2['v']['f'] = 3.2280272317;
          $s2h2['v']['g'] = 3.23108697315;
          $s2h2['v']['h'] = 3.23108697315;
          $s2h2['v']['i'] = 3.2341467146;
          $s2h2['v']['j'] = 5.15566434636;
          $s2h2['v']['k'] = 5.15566434636;
          $s2h2['v']['l'] = 5.15566434636;
          $s2h2['v']['m'] = 5.20462020959;
          $s2h2['v']['n'] = 5.20462020959;
          $s2h2['v']['o'] = 5.20462020959;
          $s2h2['v']['p'] = 5.7951503098;
          $s2h2['v']['q'] = 5.7951503098;
          $s2h2['v']['r'] = 5.7951503098;
          $s2h2['v']['s'] = 5.79821005125;
          $s2h2['v']['t'] = 5.79821005125;
          $s2h2['v']['u'] = 5.8012697927;
          $s2h2['v']['v'] = 5.90224126061;
          $s2h2['v']['w'] = 5.90224126061;
          $s2h2['v']['x'] = 5.90224126061;
          $s2h2['v']['y'] = 5.90530100207;
          $s2h2['v']['z'] = 5.90836074352;
          $s2h2['w']['a'] = 0;
          $s2h2['w']['b'] = 2.46615161019;
          $s2h2['w']['c'] = 2.478390576;
          $s2h2['w']['d'] = 2.478390576;
          $s2h2['w']['e'] = 2.478390576;
          $s2h2['w']['f'] = 3.82161707336;
          $s2h2['w']['g'] = 3.82161707336;
          $s2h2['w']['h'] = 3.82161707336;
          $s2h2['w']['i'] = 5.36678650654;
          $s2h2['w']['j'] = 7.73808613172;
          $s2h2['w']['k'] = 7.73808613172;
          $s2h2['w']['l'] = 7.73808613172;
          $s2h2['w']['m'] = 7.74114587317;
          $s2h2['w']['n'] = 7.74726535608;
          $s2h2['w']['o'] = 7.75032509753;
          $s2h2['w']['p'] = 9.1945230628;
          $s2h2['w']['q'] = 9.19758280425;
          $s2h2['w']['r'] = 9.19758280425;
          $s2h2['w']['s'] = 9.53415436396;
          $s2h2['w']['t'] = 9.53721410541;
          $s2h2['w']['u'] = 9.54639332976;
          $s2h2['w']['v'] = 9.57699074428;
          $s2h2['w']['w'] = 9.58005048573;
          $s2h2['w']['x'] = 9.58311022719;
          $s2h2['w']['y'] = 9.58311022719;
          $s2h2['w']['z'] = 9.67184272929;
          $s2h2['x']['a'] = 0;
          $s2h2['x']['b'] = 0.140748106785;
          $s2h2['x']['c'] = 0.140748106785;
          $s2h2['x']['d'] = 0.143807848237;
          $s2h2['x']['e'] = 0.143807848237;
          $s2h2['x']['f'] = 0.293735179377;
          $s2h2['x']['g'] = 0.293735179377;
          $s2h2['x']['h'] = 0.293735179377;
          $s2h2['x']['i'] = 0.296794920829;
          $s2h2['x']['j'] = 0.351870266962;
          $s2h2['x']['k'] = 0.351870266962;
          $s2h2['x']['l'] = 0.351870266962;
          $s2h2['x']['m'] = 0.354930008414;
          $s2h2['x']['n'] = 0.357989749866;
          $s2h2['x']['o'] = 0.357989749866;
          $s2h2['x']['p'] = 0.36410923277;
          $s2h2['x']['q'] = 0.36410923277;
          $s2h2['x']['r'] = 0.36410923277;
          $s2h2['x']['s'] = 0.36410923277;
          $s2h2['x']['t'] = 0.36410923277;
          $s2h2['x']['u'] = 0.370228715674;
          $s2h2['x']['v'] = 0.370228715674;
          $s2h2['x']['w'] = 0.382467681481;
          $s2h2['x']['x'] = 0.382467681481;
          $s2h2['x']['y'] = 0.422244320355;
          $s2h2['x']['z'] = 0.501797598103;
          $s2h2['y']['a'] = 0;
          $s2h2['y']['b'] = 0.3304520768;
          $s2h2['y']['c'] = 0.336571559703;
          $s2h2['y']['d'] = 0.336571559703;
          $s2h2['y']['e'] = 0.336571559703;
          $s2h2['y']['f'] = 0.976057523139;
          $s2h2['y']['g'] = 0.976057523139;
          $s2h2['y']['h'] = 0.982177006043;
          $s2h2['y']['i'] = 0.988296488947;
          $s2h2['y']['j'] = 1.02501338637;
          $s2h2['y']['k'] = 1.02501338637;
          $s2h2['y']['l'] = 1.02501338637;
          $s2h2['y']['m'] = 1.03113286927;
          $s2h2['y']['n'] = 1.03419261072;
          $s2h2['y']['o'] = 1.03419261072;
          $s2h2['y']['p'] = 1.24225502945;
          $s2h2['y']['q'] = 1.2453147709;
          $s2h2['y']['r'] = 1.24837451235;
          $s2h2['y']['s'] = 1.25143425381;
          $s2h2['y']['t'] = 1.25143425381;
          $s2h2['y']['u'] = 1.26061347816;
          $s2h2['y']['v'] = 1.38912261914;
          $s2h2['y']['w'] = 1.39218236059;
          $s2h2['y']['x'] = 1.39218236059;
          $s2h2['y']['y'] = 1.39218236059;
          $s2h2['y']['z'] = 1.39218236059;
          $s2h2['z']['a'] = 0;
          $s2h2['z']['b'] = 0.217241643081;
          $s2h2['z']['c'] = 0.223361125985;
          $s2h2['z']['d'] = 0.223361125985;
          $s2h2['z']['e'] = 0.226420867437;
          $s2h2['z']['f'] = 0.449781993422;
          $s2h2['z']['g'] = 0.449781993422;
          $s2h2['z']['h'] = 0.449781993422;
          $s2h2['z']['i'] = 0.468140442133;
          $s2h2['z']['j'] = 0.731278206992;
          $s2h2['z']['k'] = 0.731278206992;
          $s2h2['z']['l'] = 0.731278206992;
          $s2h2['z']['m'] = 0.734337948443;
          $s2h2['z']['n'] = 0.734337948443;
          $s2h2['z']['o'] = 0.737397689895;
          $s2h2['z']['p'] = 0.954639332976;
          $s2h2['z']['q'] = 0.954639332976;
          $s2h2['z']['r'] = 0.954639332976;
          $s2h2['z']['s'] = 0.957699074428;
          $s2h2['z']['t'] = 0.96075881588;
          $s2h2['z']['u'] = 0.96075881588;
          $s2h2['z']['v'] = 0.991356230399;
          $s2h2['z']['w'] = 0.991356230399;
          $s2h2['z']['x'] = 1.00359519621;
          $s2h2['z']['y'] = 1.00359519621;
          $s2h2['z']['z'] = 1.09844718121;
          $s2h2['z']['{'] = 1.09844718121;
          
          function str2hue($str) 
          {
              global $s2h1,$s2h2;
              $str = preg_replace("`[^a-z]+`","",strtolower($str));
              $len = strlen($str);
              $hue = 0;
              if($len>0) {
                  $hue += $s2h1[$str[0]];
                  if($len>1) {
                      $hue += $s2h2[$str[0]][$str[1]];
                      $max = $s2h2[$str[0]][chr(ord($str[1])+1)] - $s2h2[$str[0]][$str[1]];
                      for($i=2; $i<$len; $i++) {
                          $mult = ord($str[$i])-ord('a');
                          $hue += $max/pow(26,$len-$i)*$mult;
                      }
                  }
              }
              return $hue;
          }
          ?>
          

          Edit2: 错过了关于您希望开头相似的单词具有不同颜色的那一点……这恰恰相反。我编写了这段代码,以便在显示按字母顺序排序的项目列表时,如果颜色之间存在跳转,则表示字母之间存在跳转。

          【讨论】:

            猜你喜欢
            • 2012-06-22
            • 1970-01-01
            • 2017-02-07
            • 2012-07-07
            • 2013-04-11
            • 2011-03-24
            • 1970-01-01
            • 2021-09-05
            相关资源
            最近更新 更多