Jak wygenerować paletę podobną do palety materiałów Google?


62

Specyfikacje projektowe Google dotyczące materiałów zawierają zestawy palet kolorów :

wprowadź opis zdjęcia tutaj

Zaczynając od podstawowego koloru podstawowego, który określają jako „500”, mają następnie szereg stopniowych stopni odcienia, jaśniejszych i ciemniejszych, aby stworzyć zakres około 10 kolorów. Najjaśniejszy jest oznaczony jako „50” i jest prawie biały, a najciemniejszy, „900”, jest prawie czarny, ale oba zachowują część podstawowego koloru.

Nie mogę do końca ustalić, w jaki sposób obliczane są przyrosty. Próbowałem tego internetowego generatora próbek , ale nie mogę wybierać w tym zakresie.

Myślę, że to tylko kwestia dostosowania jasności w górę i w dół od podstawowego koloru „500”, i domyślam się, że wartość „0” byłaby czystą bielą, a „1000” byłaby czystą czernią, ale zakresy w Google paleta wydaje się mieć większe nasycenie niż prosty zakres jasności.

Czy ktoś wie, jakiego algorytmu lub procesu mogę użyć, aby przyjąć kolor podstawowy i wygenerować paletę zgodną z paletami Google?


Wydaje się, że są kolorem podstawowym, a nasycenie i wartość odpowiednio wzrastają lub zmniejszają się odwrotnie, gdy liczba rośnie lub maleje
Supuhstar

1
W rzeczywistości, cofając się o krok od ekranu, wydaje się, że używa podobnego algorytmu jak cieniowanie phong ... Muszę to rozważyć
Supuhstar

Czy znalazłeś jakieś rozwiązanie do generowania palety?
MrBrightside

@MrBrightside Howdy! Możesz wygenerować paletę, korzystając z wybranej odpowiedzi, tutaj: mcg.mbitson.com - Należy pamiętać, że kolory nie są dokładnie takie same jak palety Material Design, ale można importować dokładne palety lub generować bliskie reprezentacje z niestandardowymi kolorami. Więcej informacji o tym, dlaczego nie są to dokładne kolory tutaj: stackoverflow.com/questions/32942503/...
Mikel Bitson

1
Materiał jest TYLKO monochromatyczny dla zakresu 50-500, patrz codepen.io/sebilasse/pen/GQYKJd?editors=1010 dla ciemniejszych i akcentowanych kolorów…
sebilasse

Odpowiedzi:


41

Zrobiłem to małe narzędzie CSS3 / AngularJS dla projektu generowania palet kolorów materiałów. Możesz wpisać 500 kolorów heksadecymalnych i użyć zewnętrznego narzędzia, takiego jak ColorZilla, aby uzyskać wartości kolorów. Jaśniejsze są również te, których używał Google, ale te ciemniejsze są nieco wyłączone.

mcg.mbitson.com


Twój generator palet działa naprawdę dobrze i, o ile widzę, zbliża się do standardów Google Material Design. Jedno: możesz chcieć stworzyć większy kontrast dla tekstu na stronie. Czarny tekst na ciemnoszarym tle jest bardzo trudny do odczytania.
PYTAJĄCY

2
Cześć ludzie! Jestem programistą odpowiedzialnym za zaktualizowaną wersję narzędzia. Ostatnio zmieniam sposób, w jaki obsługuję generowanie kolorów. Jeśli ktoś ma jakieś bezpośrednie opinie na temat tego narzędzia - to technika generowania kolorów lub jakieś dodatkowe funkcje, które chcieliby, daj mi znać! W wolnym czasie pracuję nad ulepszeniami i obawiam się, że generowanie kolorów może być wyłączone, choć nadal bardzo pomocne. Nadal będę się temu przyglądać.
Mikel Bitson,

1
@MikelBitson Generator palet jest rzeczywiście wyłączony (wystarczy wpisać dowolny kolor 500 ze standardu projektowania materiałów i porównać, aby zobaczyć), jednak działa on fantastycznie z wieloma innymi kolorami podstawowymi. Kontynuujcie wspaniałą pracę!
Chris Bornhoft,

1
@MikelBitson Fantastyczne wyjaśnienie dzięki. Pomyślałem, że to coś takiego, jeszcze zanim opublikowałem swój oryginalny komentarz. Zastanawiam się, ile zarabia „Oficjalny próbnik kolorów” Google? Co za tytuł :)
Chris Bornhoft,

1
Zaktualizowany link dla tych, którzy szukają nowej wersji: mcg.mbitson.com/#
Mikel Bitson

18

Palety Google są monochromatyczne . Co utrzymuje ten sam współczynnik RGB, przesuwając jasność i nasycenie w górę lub w dół. Aby to zrobić, musisz przekonwertować wartość RGB na reprezentację HSL (Barwa, Nasycenie, Jasność), zmienić jasność i nasycenie, a następnie w razie potrzeby dokonać ponownej konwersji. Możliwe jest trzymanie go w przestrzeni RGB podczas obliczania, ale matematyka jest zbyt myląca (dla mnie do zrozumienia lub wyjaśnienia). HSL został stworzony do tradycyjnego mieszania kolorów (łatwiej nam o tym pomyśleć).

Jeśli Twoim celem jest tworzenie palet CSS, możesz zachować kolor w HSL za pomocą background-color: hsl(0,100%, 50%);.

Możesz to zrobić ręcznie w Photoshopie za pomocą próbnika kolorów. HSB jest dla jasności nasycenia odcienia (synonim HSL, to samo). Wybierz odcień, który ci się podoba i zmień nasycenie i jasność o stałą wartość. Na obrazku poniżej S = 54 i B = 77, przesuń w górę o 5% za pomocą 54 + 54 * 0.05i 77 + 77 * 0.05. Lub zmniejszyćS - S * 0.05

próbnik kolorów w Photoshopie

Uwaga dodatkowa do wyjaśnienia między Hex i RGB. 6-cyfrowy HEX # FFEB3B to tak naprawdę 3 osobne liczby, reprezentujące RGB.

#FFEB3B -> FF,EB,3B -> red:FF green:EB blue:3BKonwersja wartości HEX na dziesiętne daje red:255 green:235 blue:59 OR rgb(255,235,59).

Istnieją algorytmy do konwersji RGB na HSL, jeśli naprawdę chcesz ich na Wikipedii, ale najprostszym sposobem jest użycie lib kolorów. Ten przykład tworzy monochromatyczną paletę z please.js , posiada także inne algorytmy do tworzenia palet uzupełniających lub przyjemnych. Podobnie jak kuler.adobe, który również kołysze.

Please.make_scheme(
    Please.HEX_to_HSV('#ffeb3b'),
    {scheme_type: 'mono', format:'hex'}
);
// returns ->["#ffeb3b", "#ffe821", "#ffe508", "#e5d54c"]

4
Własne palety Google nie wykazują stałego gradientu jasności w HSV / HSB. Stworzyłem ilustrację , abyś mógł zobaczyć, o czym mówię. Na tej podstawie prawdopodobnie lepiej byłoby grać z jednym z innych modeli kolorów. Ponadto wydaje się, że nieco poprawili swój odcień dla ciemniejszych odcieni niektórych kolorów, aby nie dopuścić do zabłocenia.
Tess,

Chciałbym tutaj dodać trochę odpowiedzi sekund @ Tess. Opracowałem ulepszoną wersję generatora MCG i zauważyłem kilka rzeczy. Każda paleta Google ma inny przebieg kolorów, nie jest monochromatyczny. Nie ma formuły ani metody dokładnie naśladującej kolory - ponieważ formuła dla każdej palety kończy się zupełnie inaczej. Więcej szczegółów i przykład tego można znaleźć tutaj: github.com/mbitson/mcg/issues/19
Mikel Bitson

@MikelBitson Ale w odpowiedzi na pytanie „jakiego algorytmu lub procesu mogę użyć” głosowałbym na monochromatyczny lub jego wersję en.wikipedia.org/wiki/Monochromatic_color Ale ty i Tess masz rację, że nie jest to mono, odbiegają od odcień.
Lex,

1
@Lex - Zgadzam się z tobą, użyłbym monochromatycznego do oszacowania palety. Poparłem tylko odpowiedź Tess, ponieważ twoja odpowiedź brzmi: „Palety Google są monochromatyczne”. i spędziłem sporo czasu ostatnio walcząc z tymi kolorami. :)
Mikel Bitson

1
HSB / HSV to nie to samo, co HSL en.wikipedia.org/wiki/HSL_and_HSV
Kevin Thibedeau

1

Czy próbowałeś już pracować z kołem kolorów Adobe? Myślę, że jest nieco bardziej elastyczny niż narzędzie SlayerOffice, którego używasz.

https://color.adobe.com/

W swoim dokładnym przypadku wybierz „Cienie” i spróbuj wygłupiać się stamtąd. Nie generuje materiałów, takich jak próbki, ale to początek.


0

Możesz po prostu pobrać palety, do których Google podaje link na stronie? Ponieważ daje ci wszystkie kolory?

Próbki kolorów Google Zip


12
Myślę, że OP chciał wiedzieć, jak zacząć od własnego koloru i wygenerować podobną próbkę
Supuhstar

0

Aby wygenerować gradient kolorów / paletę na podstawie podanego koloru, zasadniczo można użyć następującego algorytmu.

  1. Wybierz minimalny i maksymalny odcień, jaki chcesz w swojej palecie
  2. Podziel „przestrzeń kolorów” między tymi kolorami w równej partycji (patrz poniżej)
  3. Kolory wyjściowe na tych etapach

Aby podzielić przestrzeń kolorów, najpierw możesz przekonwertować swój HEX na RGB. Wybierz wartości w każdym kanale. Powiedzmy, że masz kolor1 (r1, g1, b1) i kolor2 (r2, g2, b2). I chcesz 3 kolory między color1 i color2 , a następnie możesz zrobić coś takiego

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)) 

Pamiętaj, aby przekonwertować wartości RGB między (0 a 1).

W twoim przypadku możesz wziąć kolor podstawowy i podzielić przestrzeń kolorów pomiędzy white to basecolori basecolor to black. Możesz dostosować swoje kroki do swoich potrzeb.

Na koniec zrobię bezwstydną promocję utworzonej przeze mnie biblioteki python, tylko dlatego, że ma ona znaczenie dla tego pytania dotyczącego generowania palet kolorów. Nazywa się SecretColors . Możesz generować własne palety kolorów, gradienty lub używać standardowych palet kolorów, takich jak IBM, Material Design, ColorBrewer lub Clarity.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.