Quiero crear una función que acepte cualquier cadena de edad (por lo general será una sola palabra) y desde que de alguna manera generar un valor hexadecimal entre #000000
y #FFFFFF
, para que pueda utilizarlo como un color de un elemento HTML.
Tal vez incluso un valor hexadecimal abreviado (por ejemplo:) #FFF
si eso es menos complicado. De hecho, un color de una paleta 'segura para la web' sería ideal.
javascript
string
colors
hex
Darragh Enright
fuente
fuente
parseInt(hexstr, 10)
. Para convertir un entero en un hexadecimal, usen.toString(16)
, donde n es un entero.Respuestas:
Simplemente portando sobre Java desde Compute hexadecimal código de color para una cadena arbitraria a Javascript:
Para convertir harías:
fuente
("00" + ((this >> 24) & 0xFF).toString(16)).slice(-2) + ("00" + ((this >> 16) & 0xFF).toString(16)).slice(-2) + ("00" + ((this >> 8) & 0xFF).toString(16)).slice(-2) + ("00" + (this & 0xFF).toString(16)).slice(-2);
intToRGB(hashCode('hello1')) -> "3A019F"
intToRGB(hashCode('hello2')) -> "3A01A0"
yreturn 100 * hash;
Aquí hay una adaptación de la respuesta de CD Sanchez que constantemente devuelve un código de color de 6 dígitos:
Uso:
Ejemplo:
http://jsfiddle.net/sUK45/
(Una solución alternativa / más simple podría implicar devolver un código de color de estilo 'rgb (...)').
fuente
Quería una riqueza de colores similar para los elementos HTML, me sorprendió descubrir que CSS ahora admite colores hsl (), por lo que a continuación se muestra una solución completa para mí:
Consulte también ¿Cómo generar automáticamente N colores "distintos"? para más alternativas más similares a esto.
En HSL su tono, saturación, ligereza. Entonces, el tono entre 0-359 obtendrá todos los colores, la saturación es cuán rico quieres el color, 100% funciona para mí. Y la claridad determina la profundidad, el 50% es normal, el 25% son colores oscuros, el 75% es pastel. Tengo 30% porque encaja mejor con mi esquema de color.
fuente
Encuentro que generar colores aleatorios tiende a crear colores que no tienen suficiente contraste para mi gusto. La forma más fácil que he encontrado de evitarlo es rellenar previamente una lista de colores muy diferentes. Para cada nueva cadena, asigne el siguiente color en la lista:
Si bien esto tiene un límite de solo 64 colores, creo que la mayoría de los humanos realmente no pueden notar la diferencia después de eso de todos modos. Supongo que siempre puedes agregar más colores.
Si bien este código usa colores codificados, al menos se garantiza que sabrá durante el desarrollo exactamente cuánto contraste verá entre los colores en la producción.
La lista de colores se ha eliminado de esta respuesta SO , hay otras listas con más colores.
fuente
He abierto una solicitud de extracción a Please.js que permite generar un color a partir de un hash.
Puede asignar la cadena a un color así:
Por ejemplo,
"any string goes here"
devolverá como"#47291b"
y
"another!"
devuelve como"#1f0c3d"
fuente
Si sus entradas no son lo suficientemente diferentes para que un hash simple use el espectro de color completo, puede usar un generador de números aleatorios en lugar de una función hash.
Estoy usando el codificador de color de la respuesta de Joe Freeman y el generador de números aleatorios sembrados de David Bau .
fuente
Otra solución más para colores aleatorios:
Es una mezcla de cosas que hace el trabajo por mí. Usé la función JFreeman Hash (también una respuesta en este hilo) y la función pseudoaleatoria Asykäri de aquí y algo de relleno y matemáticas de mí mismo.
Dudo que la función produzca colores distribuidos uniformemente, aunque se ve bien y hace lo que debería hacer.
fuente
'0'.repeat(...)
no es válido javascriptUsando
hashCode
como en la respuesta de Cristian Sanchez conhsl
javascript moderno, puede crear un selector de color con un buen contraste como este:Como es hsl, puede escalar la luminancia para obtener el contraste que está buscando.
fuente
Aquí hay una solución que se me ocurrió para generar colores pastel estéticamente agradables basados en una cadena de entrada. Utiliza los dos primeros caracteres de la cadena como una semilla aleatoria, luego genera R / G / B basado en esa semilla.
Se podría extender fácilmente para que la semilla sea el XOR de todos los caracteres en la cadena, en lugar de solo los dos primeros.
Inspirado por la respuesta de David Crow aquí: Algoritmo para generar aleatoriamente una paleta de colores estéticamente agradable
GIST está aquí: https://gist.github.com/ro-sharp/49fd46a071a267d9e5dd
fuente
Aquí hay otro intento:
fuente
Todo lo que realmente necesita es una buena función hash. En el nodo, solo uso
fuente
Convierto esto para Java.
Tanques para todos.
fuente
Esta función hace el truco. Es una adaptación de esto, implementación bastante más larga este repositorio .
fuente