Наложение цвета на изображение

299
13 сентября 2017, 11:39

Привет всем, в матане не силён нужна помощь.

Есть картинка с прозрачностью ,например

Что мне нужно сделать что-бы после выполнения я получил что-то вроде этого.

Понимаю ,что нужно разбить на пиксели и с каждым провести некие действия, а потом собрать обратно ,но как это всё будет в виде кода?

Answer 1

По моему мнению, это легче всего сделать в цветовой модели HSL, т.е. если картинка представлена в RGB, то мы переводим её в HSL, где просто равномерно "размазываем" яркость, от 0 у края до 1 в центре. Ссылка на преобразование:

https://ru.wikipedia.org/wiki/HSL

Как, по моему мнению выглядит алгоритм, если допустить что прямое и обратное преобразование вы реализовали, и они называются соотв. RGB_TO_HSL(R,G,B) и HSL_TO_RGB(H,S,L), где на вход подается 3 числа, и ф-я возвращает 3 числа соотв. другой цветовой модели:

Начинаем с начала картинки (коорд. 0, 0, и движемся до конца, просто как по массиву). Берем значение текущего пикселя из массива, скармливаем его RGB_TO_HSL, получаем представление в HSL. H и L меняем на желаемые, (задаем желаемый цвет в RGB, скармливаем его RGB_TO_HSL, запоминаем H и S, вставляем эти H,S, на место "старых", не меняя L). Скармливаем получившееся HSL_TO_RGB, устанавливаем новые значения пикселя, пока есть пиксели. Не пробовал, по идее должно работать!

READ ALSO
Тень текста самим текстом

Тень текста самим текстом

Добрый вечер! Нужно сделать то, что на картинкеТень текста самим текстом

256
Нужен плагин адаптивного календаря [требует правки]

Нужен плагин адаптивного календаря [требует правки]

Мне нужно реализовать такой функционал, есть ли готовые решения/плагины? :

253
Выравнивание по центру css

Выравнивание по центру css

Блок обведённый в красную рамку фиксированный position: fixed;, необходимо его каким-нибудь образом выровнять вертикально по центруВысота самого...

272