Eu quero criar uma função que aceite qualquer string antiga (geralmente será uma única palavra) e a partir disso, de alguma forma, gere um valor hexadecimal entre#000000
e #FFFFFF
, para que eu possa usá-la como uma cor para um elemento HTML.
Talvez até um valor hexadecimal abreviado (por exemplo:), #FFF
se isso for menos complicado. De fato, uma cor de uma paleta "segura para a Web" seria ideal.
javascript
string
colors
hex
Darragh Enright
fonte
fonte
parseInt(hexstr, 10)
. Para converter um número inteiro em um hexadecimal, usen.toString(16)
, onde n é um número inteiro.Respostas:
Apenas migrando o código de cores hexadecimal do Java from Compute para uma string arbitrária para Javascript:
Para converter você faria:
fonte
("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"
E eu melhorar seu código adicionando multiplicação de valor final de hash:return 100 * hash;
Aqui está uma adaptação da resposta de CD Sanchez que retorna consistentemente um código de cores de 6 dígitos:
Uso:
Exemplo:
http://jsfiddle.net/sUK45/
(Uma solução alternativa / mais simples pode envolver o retorno de um código de cores no estilo 'rgb (...)'.)
fonte
Eu queria uma riqueza de cores semelhante para elementos HTML, fiquei surpreso ao descobrir que o CSS agora suporta cores hsl (), então uma solução completa para mim está abaixo:
Veja também Como gerar automaticamente N cores "distintas"? para mais alternativas mais semelhantes a isso.
No HSL sua Matiz, Saturação, Luminosidade. Portanto, o tom entre 0 e 359 terá todas as cores, a saturação é o quão rica você deseja a cor, 100% funciona para mim. E a luminosidade determina a profundidade, 50% é normal, 25% é cores escuras, 75% é pastel. Tenho 30% porque se encaixa melhor no meu esquema de cores.
fonte
Acho que gerar cores aleatórias tende a criar cores que não têm contraste suficiente para o meu gosto. A maneira mais fácil que encontrei de contornar isso é preencher previamente uma lista de cores muito diferentes. Para cada nova sequência, atribua a próxima cor na lista:
Embora isso tenha um limite para apenas 64 cores, acho que a maioria dos humanos não pode realmente dizer a diferença depois disso. Suponho que você sempre pode adicionar mais cores.
Embora esse código use cores codificadas, você tem pelo menos a garantia de saber durante o desenvolvimento exatamente quanto contraste verá entre as cores na produção.
A lista de cores foi removida desta resposta para que SO , existem outras listas com mais cores.
fonte
Abri uma solicitação de recebimento no Please.js que permite gerar uma cor a partir de um hash.
Você pode mapear a sequência para uma cor da seguinte maneira:
Por exemplo,
"any string goes here"
retornará como"#47291b"
e
"another!"
retornará como"#1f0c3d"
fonte
Se suas entradas não forem diferentes o suficiente para que um hash simples use todo o espectro de cores, você poderá usar um gerador de números aleatórios semeados em vez de uma função de hash.
Estou usando o codificador de cores da resposta de Joe Freeman e o gerador de números aleatórios semeados de David Bau .
fonte
Outra solução para cores aleatórias:
É uma mistura de coisas que faz o trabalho para mim. Eu usei a função JFreeman Hash (também uma resposta neste tópico) e a função pseudo-aleatória Asykäri daqui e alguns preenchimentos e matemática de mim mesmo.
Duvido que a função produz cores uniformemente distribuídas, embora pareça agradável e faça o que deve ser feito.
fonte
'0'.repeat(...)
javascript não é válidoUsando o
hashCode
como na resposta de Cristian Sanchez comhsl
javascript moderno, você pode criar um seletor de cores com bom contraste como este:Como é hsl, você pode dimensionar a luminância para obter o contraste que procura.
fonte
Aqui está uma solução que eu criei para gerar cores pastel esteticamente agradáveis com base em uma string de entrada. Ele usa os dois primeiros caracteres da sequência como uma semente aleatória e gera R / G / B com base nessa semente.
Ele pode ser facilmente estendido para que a semente seja o XOR de todos os caracteres da string, em vez de apenas os dois primeiros.
Inspirado pela resposta de David Crow aqui: Algoritmo para gerar aleatoriamente uma paleta de cores esteticamente agradável
O GIST está aqui: https://gist.github.com/ro-sharp/49fd46a071a267d9e5dd
fonte
Aqui está outra tentativa:
fonte
Tudo o que você realmente precisa é de uma boa função de hash. No nó, eu apenas uso
fonte
Eu converto isso para Java.
Tanques para todos.
fonte
Esta função faz o truque. É uma adaptação disso, implementação bastante mais longa neste repositório ..
fonte