Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/425.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
基于javascript中的字符串创建自定义颜色方案_Javascript_Function_Colors - Fatal编程技术网

基于javascript中的字符串创建自定义颜色方案

基于javascript中的字符串创建自定义颜色方案,javascript,function,colors,Javascript,Function,Colors,我正在尝试制作一个网络图表,根据不同的人的名字,以不同的颜色显示不同的人,这将是一致的名字 例如,如果我的资源之一是“Jane Doe”,她可能会被计算成深蓝色,“John Smith”可能是某种浅绿色 这里的诀窍是,我需要让Jane和John在图表中出现的地方的颜色保持一致,但要与图表上的其他名字明显不同 有时候这张图表只有几个人,有时候它实际上会很忙,所以根据一些有限的集合分配颜色方案对我来说似乎是个坏主意 此外,我需要使前景颜色与背景颜色形成良好的对比,以便图表易于阅读 我如何在网页中做到

我正在尝试制作一个网络图表,根据不同的人的名字,以不同的颜色显示不同的人,这将是一致的名字

例如,如果我的资源之一是“Jane Doe”,她可能会被计算成深蓝色,“John Smith”可能是某种浅绿色

这里的诀窍是,我需要让Jane和John在图表中出现的地方的颜色保持一致,但要与图表上的其他名字明显不同

有时候这张图表只有几个人,有时候它实际上会很忙,所以根据一些有限的集合分配颜色方案对我来说似乎是个坏主意

此外,我需要使前景颜色与背景颜色形成良好的对比,以便图表易于阅读


我如何在网页中做到这一点?我设想了两个javascript函数:
getBackColor(name)
getForeColor(name)
,但我不同意是否有更好的方法来实现这一点。

我会使用名称中字符的ascii值来生成颜色。这样,每个名字都会有不同的颜色。

你可以尝试的一件事是取一个名字,然后用MD5散列。这将为您提供一个较大的十六进制值,但您可以去掉前6个字符并将其用作颜色


有很多JavaScript MD5库,但这里有一个我以前使用过的库,它工作得很好:

我不确定是否可以帮助您,但是如果在类似的场景中:

我将创建一个函数,从名称中获取颜色。此功能需要完成以下任务:

 1. Return the same results with the same name every time.
 2. Be relatively random. 
在这种情况下,类似的方法应该会起作用:

function getColorFromName(name) { 

var red = 0;
   for (var i = 0; i < name.length; i++) { 
      red += name.charCodeAt(i);
   }
   red = red % 255;

   var green = 0; 
   for (var j = 0; j < name.length; j++) { 
      green += j * name.charCodeAt(j);
   }
   green = green % 255;

   var blue = 1;
   for (var k = 0; k < name.length; k++) { 
      blue = blue * name.charCodeAt(k);
   }
   blue = blue % 255;

   return 'rgb(' + red + ',' + green + ',' + blue + ')';

}
函数getColorFromName(name){ var-red=0; 对于(var i=0;i 如果要为同一名称使用两种不同的颜色,可以根据相同或类似的原则编写不同的函数以获得不同的颜色,也可以根据名称提供不同的字符串。例如,调用名称颠倒的相同函数。这样,您将有两种不同的颜色,可为每个名称复制,每个不同的名称应具有不同的颜色。 但要确保生成的颜色对比度。。。嗯,我真的不知道怎么做。在我看来,你会找到解释两种颜色对比的信息(看看它们的代码),然后限制你的功能来创建两种对比的颜色。 很抱歉,如果这还不够有用,那么当你发现两种颜色的对比度取决于它们的代码时,这个原理应该是有用的

PS:嘿,我发现了一个网站,它似乎给出了如何计算两种颜色对比度是否足够好的精确公式。

将模256这个词的所有ascii值相加,每个名称都有不同的颜色(可以这么说)。您可以将名称分成3部分,然后进行256模运算并应用RGB值。这是我的想法,可能有更好的解决方案。这是一个很好的解决方案,取决于需要生成多少颜色,也可能有点昂贵。我喜欢这个想法;这有点贵,但我敢打赌我能做得到。