Me parece que la generación de los colores al azar tiende a crear colores que no tienen suficiente contraste para mi gusto. La forma más fácil que he encontrado para evitar eso es rellenar previamente una lista de colores muy diferentes. Por cada nueva cadena , asignar el color siguiente en la lista:
// Takes any string and converts it into a #RRGGBB color.
var StringToColor = (function(){
var instance = null;
return {
next: function stringToColor(str) {
if(instance === null) {
instance = {};
instance.stringToColorHash = {};
instance.nextVeryDifferntColorIdx = 0;
instance.veryDifferentColors = ["#000000","#00FF00","#0000FF","#FF0000","#01FFFE","#FFA6FE","#FFDB66","#006401","#010067","#95003A","#007DB5","#FF00F6","#FFEEE8","#774D00","#90FB92","#0076FF","#D5FF00","#FF937E","#6A826C","#FF029D","#FE8900","#7A4782","#7E2DD2","#85A900","#FF0056","#A42400","#00AE7E","#683D3B","#BDC6FF","#263400","#BDD393","#00B917","#9E008E","#001544","#C28C9F","#FF74A3","#01D0FF","#004754","#E56FFE","#788231","#0E4CA1","#91D0CB","#BE9970","#968AE8","#BB8800","#43002C","#DEFF74","#00FFC6","#FFE502","#620E00","#008F9C","#98FF52","#7544B1","#B500FF","#00FF78","#FF6E41","#005F39","#6B6882","#5FAD4E","#A75740","#A5FFD2","#FFB167","#009BFF","#E85EBE"];
}
if(!instance.stringToColorHash[str])
instance.stringToColorHash[str] = instance.veryDifferentColors[instance.nextVeryDifferntColorIdx++];
return instance.stringToColorHash[str];
}
}
})();
// Get a new color for each string
StringToColor.next("get first color");
StringToColor.next("get second color");
// Will return the same color as the first time
StringToColor.next("get first color");
Si bien esto tiene un límite a sólo 64 colores, encuentro la mayoría de los humanos no pueden realmente decir la diferencia después de que de todos modos. Supongo que siempre puedes agregar más colores.
Si bien este código utiliza colores codificados, al menos se garantiza que durante el desarrollo se sepa exactamente cuánto contraste se verá entre los colores en producción.
La lista de colores se ha retirado de this SO answer, hay otras listas con más colores.
¿Podría dar algunos ejemplos de entrada y/o enlaces a las preguntas similares? – qw3n
No es una respuesta, pero puede encontrar útil lo siguiente: Para convertir un hexadecimal en un entero, use 'parseInt (hexstr, 10)'. Para convertir un entero a un hexadecimal, use 'n.toString (16)', donde n es un entero. –
@ qw3n - entrada de muestra: cadenas de texto simples, cortas, simples ... como 'Medicina', 'Cirugía', 'Neurología', 'Práctica general', etc. Que van desde 3 hasta 20 caracteres ... lata no encuentra el otro, pero esta es la pregunta de Java: http://stackoverflow.com/questions/2464745/compute-hex-color-code-for-an-arbitrary-string @Daniel - Gracias. Necesito sentarme y tener otra oportunidad seria en esto. Podría ser útil. –