Как создать палитру, подобную той, что используется в материальном дизайне Google?

Спецификации материального дизайна Google содержат наборы цветовых палитр :

введите описание изображения здесь

Начиная с основного основного цвета, который они обозначают как «500», они затем имеют ряд возрастающих шагов оттенка, ярче и темнее, чтобы создать диапазон примерно из 10 цветов. Самый светлый обозначен «50» и почти белый, а самый темный «900» почти черный, но оба сохраняют часть основного цвета.

Я не могу точно определить, как рассчитываются приращения. Я попробовал этот онлайн-генератор образцов , но я не могу набрать диапазон.

Я думаю, что это просто вопрос регулировки яркости вверх и вниз от базового цвета «500», и я предполагаю, что значение «0» будет чисто белым, а «1000» будет чисто черным, но диапазоны в Google палитра кажется более насыщенной, чем простой диапазон яркости.

Кто-нибудь знает, какой алгоритм или процесс я могу использовать, чтобы взять базовый цвет и создать палитру в соответствии с палитрами Google?

Они кажутся базовым цветом с насыщенностью и значением соответственно, увеличивающимися или уменьшающимися обратно пропорционально увеличению или уменьшению числа.
На самом деле, если отступить от экрана, похоже, что он использует алгоритм, похожий на затенение Фонга... Мне нужно это рассмотреть.
Вы нашли какое-нибудь решение для создания палитры?
@MrBrightside Привет! Вы можете создать палитру, используя выбранный ответ, здесь: mcg.mbitson.com . Обратите внимание, что цвета не совсем совпадают с палитрами Material Design, хотя вы можете импортировать точные палитры или создавать близкие представления с пользовательскими цветами. Подробнее о том, почему они не точного цвета, здесь: stackoverflow.com/questions/32942503/…
Я генерирую их цвета, используя их библиотеку MDL и назначая соответствующие классы цветов. Оттуда я использую JavaScript для .getComputedStyle. см. https://rack.pub/swatch
Материал ТОЛЬКО монохромный для диапазона 50-500, см. codepen.io/sebilasse/pen/GQYKJd?editors=1010 для более темных и акцентных цветов…
Ссылка в комментарии sebilasse чуть выше является лучшим «ответом» в этом вопросе и ответе. Введите другое шестнадцатеричное значение и посмотрите результаты. Изучите его код js, чтобы увидеть, как он это делает.
Вы можете попробовать свои силы в официальном инструменте Google для создания цветовой палитры материалов: material.io/inline-tools/color
Не знаю, почему я не могу ответить на этот вопрос, поэтому пишу здесь. По моему наивному мнению, любой алгоритм, жестко задающий указанный начальный цвет равным 500, неверен. В StackOverflow есть вопрос [цветовая палитра дизайна материалов] [3], в котором обсуждается то же самое. Правильный ответ на этот вопрос исходит от [aytek][4]. [3]: stackoverflow.com/questions/32942503/… [4]: ​​stackoverflow.com/users/1259775/aytek

Ответы (5)

Я сделал этот небольшой инструмент CSS3/AngularJS для проекта по созданию палитр Material Colors. Вы можете ввести свой 500 шестнадцатеричный цвет и использовать внешний инструмент, такой как ColorZilla, чтобы получить оттуда значения цвета. Кроме того, более светлые — это именно те, которые использовал Google, но более темные немного отличаются.

mcg.mbitson.com

Ваш генератор палитр работает очень хорошо и, насколько я вижу, приближается к стандартам Google Material Design. Одна вещь: вы можете захотеть создать больше контраста для текста на странице. Черный текст на темно-сером фоне очень плохо читается.
Поиск точных значений, которые Google генерирует с помощью своей палитры. Использовал часть кода из вашего проекта: stackoverflow.com/q/32942503/1048340
Эй, ребята! Я разработчик обновленной версии инструмента. Недавно я изменил способ обработки генерации цвета. Если у кого-то есть какие-либо отзывы об этом инструменте — техника генерации цвета или какие-либо дополнительные функции, которые им нужны, пожалуйста, дайте мне знать! Я все еще разрабатываю улучшения в свободное время и боюсь, что генерация цвета может быть отключена, хотя все еще очень полезна. Я продолжу изучать это.
@MikelBitson Генератор палитры действительно отключен (просто введите любые 500 цветов из стандарта дизайна материалов и сравните, чтобы увидеть), однако, тем не менее, он фантастически работает со многими другими базовыми цветами. Продолжайте в том же духе!
@ChrisBornhoft Привет, Крис! Спасибо за отзыв, мужик. Да, я знаю, что они выключены, но, к сожалению, это действительно неизбежно. Для получения дополнительной информации см. эту ветку проблемы: github.com/mbitson/mcg/issues/19 Или эту ветку на stackoverflow для получения дополнительной информации: stackoverflow.com/questions/32942503/…
@MikelBitson Фантастическое объяснение, спасибо. Я подумал, что это было что-то вроде этого, еще до того, как я разместил свой оригинальный комментарий. Интересно, сколько зарабатывает «Официальная палитра цветов» Google? Какой заголовок :)
Отличная работа!! Вы действительно должны связать старую версию с новой версией, так как она намного лучше. Спасибо тебе за это.
Обновленная ссылка для тех, кто ищет новую версию: mcg.mbitson.com/#
Я думаю, что ваши сгенерированные цвета выглядят хорошо (в обновленной версии). Я почти уверен, что поддон Google настроен вручную, иначе они выставят свой генератор (если он действительно не умен). Я создаю приложение, в котором клиент вводит основной цвет и дополнительный цвет, и оно генерирует всю схему во внешнем интерфейсе. спасибо за пример кода.

Палитры Google монохромны . Что сохраняет то же соотношение RGB, сдвигая яркость и насыщенность вверх или вниз. Для этого вам нужно преобразовать значение RGB в представление HSL (оттенок, насыщенность, яркость), изменить яркость и насыщенность, а затем преобразовать обратно, если это необходимо. Можно оставить его в пространстве RGB при расчете, но математика слишком запутана (для меня, чтобы понять или объяснить). HSL был создан для традиционного смешивания цветов (нам проще об этом думать).

Если вашей целью является создание палитр CSS, вы можете сохранить цвет в HSL, используя файлы background-color: hsl(0,100%, 50%);.

Вы можете сделать это вручную в Photoshop, используя палитру цветов. HSB предназначен для яркости насыщенности оттенка (синоним HSL, то же самое). Выберите оттенок, который вам нравится, и измените насыщенность и яркость на постоянное значение. На изображении ниже S=54 и B=77 сдвиньте вверх на 5% с помощью 54 + 54 * 0.05и 77 + 77 * 0.05. Или сместиться внизS - S * 0.05

подборщик цветов в фотошопе

Боковое примечание для уточнения между Hex и RGB. 6-значный HEX #FFEB3B на самом деле представляет собой 3 отдельных числа, представляющих RGB.

#FFEB3B -> FF,EB,3B -> red:FF green:EB blue:3Bпреобразование значений HEX в десятичные дает вам red:255 green:235 blue:59 OR rgb(255,235,59).

Существуют алгоритмы преобразования RGB в HSL, если они вам действительно нужны в Википедии , но самый простой способ — использовать библиотеку цветов. В этом примере создается монохромная палитра с помощью please.js. В нем также есть другие алгоритмы для создания дополнительных или приятных палитр. Очень похоже на kuler.adobe, который тоже крут.

Please.make_scheme(
    Please.HEX_to_HSV('#ffeb3b'),
    {scheme_type: 'mono', format:'hex'}
);
// returns ->["#ffeb3b", "#ffe821", "#ffe508", "#e5d54c"]
Собственные палитры Google не показывают постоянного градиента яркости по HSV/HSB. Я создал иллюстрацию , чтобы вы могли видеть, о чем я говорю. Исходя из этого, вам, вероятно, лучше поиграть с одной из других цветовых моделей. Кроме того, они, кажется, немного подправили свой оттенок для более темных оттенков некоторых цветов, чтобы они не становились грязными.
Я хотел бы немного добавить сюда ответ @Tess. Я разработал расширенную версию генератора MCG и в процессе заметил несколько вещей. Каждая палитра Google следует разной последовательности цветов, она не является монохромной. Не существует формулы или метода для точного воспроизведения цветов, так как формула для каждой палитры оказывается совершенно разной. Более подробную информацию и пример можно найти здесь: github.com/mbitson/mcg/issues/19 .
@MikelBitson Но в ответ на вопрос «какой алгоритм или процесс я могу использовать», я бы проголосовал за монохромный или его версию en.wikipedia.org/wiki/Monochromatic_color Но вы и Тесс правы, это не строго монохром, они отклоняются от оттенок.
@Lex - я согласен с вами, я бы использовал монохромный для оценки палитры. Я только поддержал ответ Тесс, потому что в вашем ответе говорится, что «палитры Google монохромны». и я провел много времени в последнее время, борясь с этими цветами. :)
HSB/HSV — это не то же самое, что HSL en.wikipedia.org/wiki/HSL_and_HSV

Вы пробовали работать с Adobe Color Wheel? Я думаю, что он немного более гибкий, чем инструмент SlayerOffice, который вы используете.

https://color.adobe.com/

Для вашего конкретного случая выберите «Оттенки» и попробуйте дурачиться оттуда. Он не будет генерировать материальный дизайн, как образцы, но это только начало.

Можно было просто скачать те палитры, на которые гугл дает ссылку на сайте? Так как он дает вам все цвета?

Образцы цветов Google ZIP

Я думаю, что ОП хотел знать, как начать со своего цвета и создать аналогичный образец.

Чтобы создать цветовой градиент/палитру из заданного цвета, вы можете использовать следующий алгоритм.

  1. Определите минимальный и максимальный оттенок, который вы хотите в своей палитре
  2. Разделите «цветовое пространство» между этими цветами на равные части (см. Ниже)
  3. Вывод цветов на этих шагах

Для разделения цветового пространства между ними сначала вы можете преобразовать цвет HEX в RGB. Выберите значения в каждом канале. Допустим, у вас есть цвет1 (r1, g1, b1) и цвет2 (r2, g2, b2). И вы хотите 3 цвета между color1 и color2 , тогда вы можете сделать что-то вроде следующего

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

Не забудьте преобразовать значения RGB между (0 и 1).

В вашем случае вы можете взять базовый цвет и разделить цветовое пространство между white to basecolorи basecolor to black. Вы можете настроить свои шаги в соответствии с вашими потребностями.

Наконец, я собираюсь сделать некоторую бесстыдную рекламу созданной мной библиотеки Python, просто потому, что она имеет отношение к этому вопросу о создании цветовой палитры. Называется SecretColors . Вы можете создавать собственные цветовые палитры, градиенты или использовать стандартные цветовые палитры, такие как IBM, Material Design, ColorBrewer или Clarity.