Алгоритм "инвертирования" цвета изображения
От: xakpc Россия linkedin.com/in/xakpc
Дата: 10.10.12 11:10
Оценка:
Добрый день.

Возник вопрос, предположим существует картинка:

необходимо инвертировать цвета фона и изображения чтобы получить такую картинку


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

Есть идеи?
Re: Алгоритм "инвертирования" цвета изображения
От: Senyai Россия http://www.arseniy.net
Дата: 10.10.12 12:16
Оценка:
Здравствуйте, xakpc, Вы писали:

X>Добрый день.


Картинок нет. Там hot linking disabled очень злой.
Не бойтесь совершенства. Вам его не достичь. © Сальвадор Дали
Re: Алгоритм "инвертирования" цвета изображения
От: Кодт Россия  
Дата: 10.10.12 20:56
Оценка: 3 (1) +1
Здравствуйте, xakpc, Вы писали:

Против хотлинкинга есть два средства: или дать адрес веб-странички с картинками, или заставить пользователей использовать wget, curl и т.п. качалки с возможностью указывания реферрера. Что я и сделал

После чего отмасштабировал и свёл в одну картинку


X>Особенность картинки в том что на границе изображения и фона существует "переход", "сглаживание", "называйте как угодно".

X>Есть идеи?

Ну и ничего сложного. Картинка монохромная: бело-зелёная, плюс альфа-канал.
Рассмотрим растяжку цветов между точками "насыщенный зелёный" (#128e4d) и "чистый белый" (#ffffff).
Находим, где на этой оси находится цвет каждого пиксела. И простым вычитанием находим дополнительный цвет.
r0,g0,b0 = 0x12, 0x8E, 0x4D
r1,g1,b1 = 0xFF, 0xFF, 0xFF

ri,gi,bi # исходный цвет пиксела
# игнорируем ri и bi

p = 1.0*(gi-b0)/(g1-g0) # положение на оси (0.0 - зелёный, 1.0 - белый)
q = 1.0-p # дополнение
go = g0+q*(gi-g0)/(g1-g0) # вот он, наш дополнительный цвет (зелёный канал)

# то же самое проделываем с красным и синим каналами (используя эту же пропорцию или находя новую независимо)
Перекуём баги на фичи!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.