Como se gera uma paleta semelhante à do design de materiais do Google?

62

As especificações de design do material do Google têm conjuntos de paletas de cores :

insira a descrição da imagem aqui

Começando com uma cor primária básica, que eles designam como "500", eles têm várias etapas incrementais de sombra, mais brilhantes e mais escuras, para criar uma faixa de cerca de 10 cores. O mais claro é designado "50" e é quase branco, e o mais escuro, "900", é quase preto, mas ambos retêm parte da cor base.

Não consigo determinar como os incrementos são calculados. Tentei este gerador de amostras on-line , mas não consigo discar no intervalo.

Eu acho que é apenas uma questão de ajustar a luminosidade para cima e para baixo a partir da cor "500" básica, e suponho que um valor de "0" seja branco puro e "1000" seja preto puro, mas os intervalos nas configurações do Google As paletas parecem ter mais saturação do que uma simples faixa de luminosidade.

Alguém sabe qual algoritmo ou processo posso usar para obter uma cor de base e gerar uma paleta alinhada com as paletas do Google?

Questionador
fonte
Eles parecem ser a cor de base com o valor de saturação e, respectivamente aumentadas ou diminuídas na razão inversa do número vai para cima ou para baixo
Supuhstar
11
Na verdade, dando um passo para trás da tela, ele parece usar um algoritmo semelhante ao sombreamento Phong ... eu vou ter que considerar isso
Supuhstar
Você encontrou alguma solução para gerar a paleta?
MrBrightside
@MrBrightside Howdy! Você pode gerar uma paleta usando a resposta escolhida, aqui: mcg.mbitson.com - Observe que as cores não são exatamente iguais às paletas de design de materiais, mas é possível importar as paletas exatas ou gerar representações mais próximas com cores personalizadas. Mais sobre por que eles não são as cores exatas aqui: stackoverflow.com/questions/32942503/...
Mikel Bitson
11
O material é SOMENTE monocromática para a faixa de 50-500, consulte codepen.io/sebilasse/pen/GQYKJd?editors=1010 para cores mais escuras e sotaque ...
sebilasse

Respostas:

41

Eu fiz essa pequena ferramenta CSS3 / AngularJS para um projeto para gerar paletas de cores dos materiais. Você pode inserir sua cor hexadecimal 500 e usar uma ferramenta externa como ColorZilla para obter os valores de cor a partir daí. Além disso, os mais leves são exatamente os que o Google usou, mas os mais escuros estão um pouco afastados.

mcg.mbitson.com

Dave
fonte
Seu gerador de paleta funciona muito bem e, tanto quanto eu posso ver, se aproxima dos padrões do Google Material Design. Uma coisa: convém criar mais contraste para o texto na página. O texto em preto sobre fundo cinza escuro é muito difícil de ler.
Pergunta
2
Ei pessoal! Eu sou o desenvolvedor da versão atualizada da ferramenta. Recentemente, mudei de maneira a lidar com a geração de cores. Se alguém tiver algum feedback direto para esta ferramenta, seja pela técnica de geração de cores ou por outros recursos que desejar, entre em contato! Ainda estou desenvolvendo melhorias no meu tempo livre e temo que a geração de cores possa estar desativada, embora ainda seja muito útil. Vou continuar a investigar.
Mikel Bitson
11
@MikelBitson O gerador de paleta está realmente desligado (basta inserir 500 cores no padrão de design do material e comparar para ver), no entanto, ele funciona de maneira fantástica com muitas outras cores básicas. Continue com o ótimo trabalho!
22620 Chris Corneloft
11
@MikelBitson Fantastic explicação obrigado. Achei que era algo assim antes mesmo de postar meu comentário original. Gostaria de saber quanto ganha o "Seletor de cores oficial" do Google? O que um título :)
Chris Bornhoft
11
Link atualizado para aqueles que procuram a nova versão: mcg.mbitson.com/#
Mikel Bitson 24/10/16
18

As paletas do Google são monocromáticas . O que mantém a mesma proporção RGB alterando a luminosidade e a saturação para cima ou para baixo. Para fazer isso, você deve converter o valor RGB em representação HSL (matiz, saturação, luminosidade), alterar a luminosidade e a saturação e, em seguida, converter novamente, se necessário. É possível mantê-lo no espaço RGB durante o cálculo, mas a matemática é muito confusa (para eu entender ou explicar). O HSL foi criado para a mistura tradicional de cores (é mais fácil pensar nisso).

Se seu objetivo é criar paletas CSS, você pode manter a cor em HSL usando background-color: hsl(0,100%, 50%);.

Você pode fazer isso manualmente no Photoshop usando o seletor de cores. O HSB é para brilho de saturação de matiz (sinônimo de HSL, mesma coisa). Escolha uma tonalidade desejada e altere a saturação e o brilho por um valor consistente. Na imagem abaixo, S = 54 e B = 77, aumente 5% usando 54 + 54 * 0.05e 77 + 77 * 0.05. Ou para mudar para baixoS - S * 0.05

seletor de cores do photoshop

Nota lateral para esclarecer entre Hex e RGB. Os 6 dígitos HEX # FFEB3B são na verdade 3 números separados, representando RGB.

#FFEB3B -> FF,EB,3B -> red:FF green:EB blue:3Bconverter os valores HEX em decimal fornece a você red:255 green:235 blue:59 OR rgb(255,235,59).

Existem algoritmos para converter RGB em HSL, se você realmente os quer na Wikipedia, mas a maneira mais simples é usar uma biblioteca de cores. Este exemplo cria uma paleta monocromática com please.js e também possui outros algoritmos para criar paletas complementares ou agradáveis. Muito parecido com o kuler.adobe, que também é ótimo.

Please.make_scheme(
    Please.HEX_to_HSV('#ffeb3b'),
    {scheme_type: 'mono', format:'hex'}
);
// returns ->["#ffeb3b", "#ffe821", "#ffe508", "#e5d54c"]
Lex
fonte
4
As próprias paletas do Google não mostram um gradiente de brilho constante no HSV / HSB. Eu criei uma ilustração para que você possa ver do que estou falando. Com base nisso, você provavelmente seria melhor jogar com um dos outros modelos de cores. Além disso, eles parecem ter mudado um pouco o tom dos tons mais escuros de algumas cores, para evitar que fiquem turvos.
Tess
Gostaria de acrescentar aqui alguns segundos a resposta da @ Tess. Desenvolvi a versão aprimorada do gerador MCG e, no processo, notei algumas coisas. Cada paleta do Google segue uma progressão diferente de cores, não é monocromática. Não existe uma fórmula ou método para imitar as cores exatamente, pois a fórmula para cada paleta acaba sendo completamente diferente. Mais detalhes e um exemplo disso podem ser encontrados aqui: github.com/mbitson/mcg/issues/19
Mikel Bitson 02/11/2015
@MikelBitson Mas, em resposta à pergunta 'que algoritmo ou processo eu posso usar' eu votaria no monocromático ou em uma versão dele en.wikipedia.org/wiki/Monochromatic_color Mas você e Tess estão certos, não são estritamente mono, eles se desviam de o matiz.
Lex
11
@ Lex - eu concordo com você, eu usaria monocromático para estimar uma paleta. Apoiei apenas a resposta de Tess porque sua resposta afirma que "as paletas do Google são monocromáticas". e passei bastante tempo recentemente lutando com essas cores. :)
Mikel Bitson
11
HSB / HSV não é a mesma como HSL en.wikipedia.org/wiki/HSL_and_HSV
Kevin Thibedeau
1

Você já tentou trabalhar com o Color Wheel da Adobe? Eu acho que é um pouco mais flexível do que a ferramenta SlayerOffice que você está usando.

https://color.adobe.com/

Para o seu caso exato, escolha "Shades" e tente brincar de lá. Não gera design de material como amostras, mas é um começo.

sharedphysics
fonte
0

Você pode simplesmente baixar as paletas para as quais o Google fornece um link no site? Uma vez que lhe dá todas as cores?

Zip das amostras de cores do Google

McIvor
fonte
12
Acho OP queria saber como começar com sua própria cor e gerar uma amostra semelhante
Supuhstar
0

Para gerar gradiente / paleta de cores a partir de determinada cor, essencialmente você pode usar o seguinte algoritmo.

  1. Decida a tonalidade mínima e máxima desejada na sua paleta
  2. Divida o 'espaço de cores' entre essas cores em uma partição igual (veja abaixo)
  3. Cores de saída nestas etapas

Para dividir o espaço de cores entre, primeiro você pode converter a cor do seu HEX em RGB. Selecione valores em cada canal. Digamos que você tenha cor1 (r1, g1, b1) e cor2 (r2, g2, b2). E você quer 3 cores entre color1 e color2 , então você pode fazer algo como seguir

all_colors = []
steps = no_of_colors + 1
rdelta, gdelta, bdelta = (r2 - r1) / steps, (g2 - g1) / steps, (b2 - b1) / steps
for step in range(steps - 1):
    r1 += rdelta
        g1 += gdelta
        b1 += bdelta
all_colors.append((r1, g1, b1)) 

Lembre-se de converter valores RGB entre (0 e 1).

No seu caso, você pode usar a cor base e dividir o espaço de cores entre white to basecolore basecolor to black. Você pode ajustar suas etapas de acordo com sua necessidade.

Finalmente, farei uma promoção vergonhosa da biblioteca python que criei, apenas porque é relevante para essa pergunta sobre a geração da paleta de cores. É chamado SecretColors . Você pode gerar paletas de cores próprias, gradientes ou usar paletas de cores padrão, como IBM, Material Design, ColorBrewer ou Clarity.

Dexter
fonte