Как все началось

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

Итак, проблема в том, когда я хочу назвать эти переменные. С основными цветами легко, но когда дело доходит до большого количества названий цветов, я понятия не имею, как их назвать? Ну, я знаю только красный, зеленый и синий 😎 (хорошо, шучу… я узнаю больше названий цветов… 😉).

Так что на то, чтобы выбрать собственное имя, у меня ушло бы около 15 минут. Такая трата времени 😔.

Я был уверен, что должен быть способ получше. Поэтому я немного поискал и нашел несколько полезных веб-сайтов, которые помогли мне выбрать названия цветов, например http://chir.ag/projects/name-that-color

Инструменты были хорошими и красивыми, но мне не хотелось покидать среду программирования и переключаться на другое приложение только для того, чтобы найти имя. Поэтому я решил написать небольшой модуль узла, чтобы сделать это за меня.

Так родился Черанги.

Cherangi (Che Rangi?) - предложение на фарси (персидском), которое означает «Какого цвета?»

Установка

$ npm install -g cherangi

использование

$ cherangi #fcfcfc

полученные результаты

{ status: 2,
name: 'Brilliance',
hex: '#fdfdfd',
delta: 0.34559411394170403,
message: 'Not perceptible by human eyes' }

Как я разработал Cherangi

Для начала: самый быстрый способ получить имена - через терминал; Я могу получить доступ к терминалу в Visual Studio Code (который является моим основным редактором кода). А модули Node могут выполняться как CLI, поэтому я решил сделать cherangi как модуль node.

Исходный код можно найти здесь 👇 на моей странице github.



Итак, создание модуля узла было простым: я уже построил несколько других модулей и сразу же начал писать коды.
Сначала мне нужна была функция, которая считывала бы ввод и очищала его до значения цвета HEX.
Затем следующей проблемой были имена. Ну, очевидно, я не мог назвать цвета, поэтому мне понадобилась библиотека названий цветов, чтобы мне помочь.

Первой мыслью было поискать в сети имена и извлечь их. Когда я начал это делать, я нашел отличный проект на github от meodai, который уже создал то, что я искал.



Поэтому я использовал его цветовую библиотеку (16K + Color 🌈 имена доступны 😎).

ОК, теперь давайте столкнемся со следующей проблемой. Инструмент должен был прочитать цвет ввода и сопоставить его с библиотекой цветов. если совпадение, то мне нужно показать имя, но что, если совпадения не найдено?

Если совпадений не было найдено, лучшим способом было показать в библиотеке цветов ближайший цвет, который соответствует входному цвету.

Но как? После небольшого исследования я узнал больше о цветовых системах, прочитав о них (я люблю кодировать ... разве не так здорово? Ты так много узнаешь, пока хочешь что-то создать).



Итак, я узнал, что мне нужно было найти расстояния между этими двумя точками; поэтому мне пришлось изменить цветовую систему RGB на цветовую систему LAB, чтобы иметь возможность рассчитать расстояние с помощью алгоритма Delta E.

Благодаря Zachary Schuessler за отличную статью о Delta E мне удалось написать функцию, которая будет производить вычисления и находить мне наиболее близкий цвет.

Прекрасной особенностью этого алгоритма было то, что он мог возвращать саму дельту, которую я немного изменил в своей функции и назвал ее статусом.
Теперь значение статуса может даже сказать, насколько далеко два цвета находятся друг от друга и насколько это можно обнаружить. для человеческих глаз 👀. Вуаля! 🎉 это так круто, Теперь я даже могу сказать, может ли человек различать два цвета или нет.

Итак, проблема решена. Теперь у меня была замечательная функция, которая делала за меня все вычисления.

deltaE1994 Функция

mathColor Функция

Теперь я мог прочитать ввод, сопоставить его с библиотекой цветов, и, если совпадения не было найдено, был выбран ближайший цвет и для пользователя был отправлен следующий объект:

{ status: 2,
name: 'Brilliance',
hex: '#fdfdfd',
delta: 0.34559411394170403,
message: 'Not perceptible by human eyes' }

И все, модуль готов. Я надеюсь тебе это понравится.

Пожалуйста, оставьте мне свои комментарии ниже, чтобы я мог улучшить этот инструмент.

Очень скоро я напишу о своем пути создания этого приложения для мобильных 📱.

Ваше здоровье!