Estou procurando um algoritmo simples para gerar um grande número de cores aleatórias e esteticamente agradáveis. Portanto, não há cores loucas de neon, cores que lembram fezes, etc.
Encontrei soluções para esse problema, mas elas dependem de paletas de cores alternativas do que RGB. Eu prefiro usar RGB direto do que mapear para frente e para trás. Essas outras soluções também podem gerar no máximo apenas 32 cores aleatórias agradáveis.
Alguma idéia seria ótima.
Respostas:
Você pode calcular a média dos valores RGB de cores aleatórias com os de uma cor constante:
(exemplo em Java)
A mistura de cores aleatórias com o branco (255, 255, 255) cria tons neutros, aumentando a luminosidade, mantendo o tom da cor original. Esses pastéis gerados aleatoriamente geralmente andam bem juntos, especialmente em grandes números.
Aqui estão algumas cores pastel geradas usando o método acima:
Você também pode misturar a cor aleatória com um pastel constante, o que resulta em um conjunto colorido de cores neutras. Por exemplo, usar um azul claro cria cores como estas:
Indo além, você pode adicionar heurísticas ao seu gerador que levem em consideração cores ou níveis de sombreamento complementares, mas tudo depende da impressão que você deseja obter com suas cores aleatórias.
Alguns recursos adicionais:
fonte
Eu usaria uma roda de cores e, dada uma posição aleatória, você poderia adicionar o ângulo dourado (137,5 graus)
http://en.wikipedia.org/wiki/Golden_angle
para obter cores diferentes sempre que não se sobrepõem.
Ajustando o brilho da roda de cores, você também pode obter diferentes combinações de cores claras / escuras.
Encontrei este post do blog que explica muito bem o problema e a solução usando a proporção áurea.
http://martin.ankerl.com/2009/12/09/how-to-create-random-colors-programmatically/
UPDATE: Acabei de encontrar essa outra abordagem:
É chamado de método RYB (vermelho, amarelo, azul) e é descrito neste artigo:
http://threekings.tk/mirror/ryb_TR.pdf
como "Composição de cores inspiradas em tinta".
O algoritmo gera as cores e cada nova cor é escolhida para maximizar sua distância euclidiana às previamente selecionadas.
Aqui você pode encontrar uma boa implementação em javascript:
http://afriggeri.github.com/RYB/
ATUALIZAÇÃO 2:
A Sciences Po Medialb acaba de lançar uma ferramenta chamada "I want Hue", que gera paletas de cores para cientistas de dados. Usando diferentes espaços de cores e gerando as paletas usando o cluster de k ou meios de vetores de força (gráficos de repulsão) Os resultados desses métodos são muito bons, eles mostram a teoria e uma implementação em sua página da web.
http://tools.medialab.sciences-po.fr/iwanthue/index.php
fonte
Em javascript:
Viu a ideia aqui: http://blog.functionalfun.net/2008/07/random-pastel-colour-generator.html
fonte
A conversão para outra paleta é uma maneira muito superior de fazer isso. Há uma razão para eles fazerem isso: outras paletas são 'perceptivas' - ou seja, juntam cores semelhantes e o ajuste de uma variável altera a cor de maneira previsível. Nada disso se aplica ao RGB, onde não há relação óbvia entre as cores que "combinam bem".
fonte
Eu tive sucesso usando o TriadMixing e o CIE94 para evitar cores semelhantes. A imagem a seguir usa as cores de entrada vermelho, amarelo e branco. Veja aqui .
fonte
Uma resposta que não deve ser esquecida, porque é simples e apresenta vantagens, é a amostragem de fotos e pinturas da vida real. experimente quantos pixels aleatórios desejar cores aleatórias nas miniaturas de fotos de arte moderna, cézanne, van gogh, monnet, fotos ... a vantagem é que você pode obter cores por tema e que são cores orgânicas. basta colocar de 20 a 30 fotos em uma pasta e amostrar aleatoriamente uma foto aleatória toda vez.
A conversão para valores HSV é um algoritmo de código generalizado para paleta psicologicamente baseada. HSV é mais fácil de randomizar.
fonte
Em php:
fonte: https://stackoverflow.com/a/12266311/2875783
fonte
Aqui está um gerador de cores rápido e sujo em C # (usando a 'abordagem RYB' descrita neste artigo ). É uma reescrita do JavaScript .
Usar:
As duas primeiras cores tendem a ser brancas e um tom de preto. Costumo ignorá-los assim (usando o Linq):
Implementação:
fonte
O método de David Crow em uma linha dupla R:
fonte
Para pastel, passe números inteiros luma escuro / claro mais altos - ou seja, fnGetRandomColour (120, 250)
Créditos: todos os créditos em http://paulirish.com/2009/random-hex-color-code-snippets/ stackoverflow.com/questions/12043187/how-to-check-if-hex-color-is-too-black
fonte
Adaptação JavaScript da resposta original de David Crow, incluindo o código específico do IE e do Nodejs.
Execute a função usando:
fonte
Use cores distintas .
Escrito em javascript.
Ele gera uma paleta de visualmente distintas.
cores distintas é altamente configurável:
fonte
você poderia tê-los dentro de um certo brilho. isso controlaria um pouco a quantidade de cores "neon". por exemplo, se o "brilho"
estava dentro de um certo limite, teria uma cor clara e desbotada. Por outro lado, se estivesse dentro de um certo limite inferior, seria mais escuro. Isso eliminaria todas as cores loucas e de destaque e se você escolher um limite muito alto ou muito baixo, todos eles ficarão bem próximos de branco ou preto.
fonte
Vai ser difícil conseguir o que você deseja algoritmicamente - as pessoas estudam a teoria das cores há muito tempo e nem sequer conhecem todas as regras.
No entanto, existem alguns regras que você pode usar para selecionar combinações de cores ruins (ou seja, existem regras para combinar cores e escolher cores complementares).
Eu recomendo que você visite a seção de arte da sua biblioteca e consulte os livros sobre teoria das cores para entender melhor o que é uma boa cor antes de tentar criar uma - parece que você nem sabe por que certas combinações funcionam e outras não. t.
-Adão
fonte
Eu recomendo fortemente o uso de uma função de sombreador CG HSVtoRGB, eles são incríveis ... oferece controle natural de cores como um pintor, em vez de um monitor CRT, o que você provavelmente não é!
Esta é uma maneira de fazer 1 valor flutuante. Cinza, em 1000 ds de combinações de cores, brilho e saturação, etc:
O resultado é RANDOMIZAÇÃO INCRÍVEL DA COR! não é natural, mas usa gradientes de cores naturais e parece parâmetros orgânicos e controláveis irridescentes / pastel.
Para o perlin, você pode usar esta função, é uma versão rápida em zig zag do perlin.
fonte
Aqui está algo que eu escrevi para um site que criei. Ele gera automaticamente uma cor de plano de fundo aleatória para qualquer div da classe
.flat-color-gen
. O Jquery é necessário apenas para a finalidade de adicionar css à página; não é necessário para a parte principal disso, que é ogenerateFlatColorWithOrder()
método.JsFiddle Link
fonte