Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.12.2014, 11:39
Интересующийся
Отправить личное сообщение для dmitriy94 Посмотреть профиль Найти все сообщения от dmitriy94
 
Регистрация: 20.12.2014
Сообщений: 24

Интерактивное изменение цвета сегментов изображения
Задача такова:
На сайте клиента должно быть изображение одежды с кликабельными сегментами и элемент для выбора цвета. Пользователь выбирает сегмент изображения и цвет, после этого у выбранного сегмента меняется цвет на выбранный. Вопрос в том, как это реализовать. Хотя бы примерно. Flash отпадает, потому что у него, вроде как, проблемы с отображением на мобильных устройствах. Вся сложность заключается в сегментации изображения. Изображений очень много, и отрисовывать каждый сегмент просто нереально. А если и отрисовывать вручную, то как потом эти сегменты собрать в один файл с кликабельностью каждого. Менять цвет, как я понимаю, можно с помощью Canvas и drawImage. Хотя бы покажите направление, где искать. И вообще, возможно ли это реализовать средствами языка, необязательно JS, можно любым другим скриптовым языком. Спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 26.12.2014, 21:19
Интересующийся
Отправить личное сообщение для dmitriy94 Посмотреть профиль Найти все сообщения от dmitriy94
 
Регистрация: 20.12.2014
Сообщений: 24

Задачу не решил, но появились мысли, как реализовать. Кому интересно, может добавит что-нибудь к этому. В общем, все изображения, как выяснилось, будут сделаны в Corel. В картинке у каждого сегмента нужно провести границы уникального цвета, который больше нигде повторяться не будет, толщиной в 1 пиксель. По сути, изображение - это матрица (массив), значения каждой ячейки которой - какой-либо цвет. В месте, где пользователь кликнет мышкой, будут определены координаты пикселя, от которого нужно будет во все стороны делать перебор координат, распознавая нужные координаты пикселя по его значению, то есть цвету. Это и будут пиксели границы. Нужно будет найти 4 координаты, где граница рядом с выбранным пикселем будет выделяться по расположению сильнее всего. Другими словами, найти наивысшие точки границы. После того, как нашли эти точки, делаем перебор в прямоугольнике где углами будут начальная точка, наивысшая верхняя и боковая. И так должно получиться 4 прямоугольника. Затем все найденные координаты (это и будет граница сегмента) перекрасить в другой цвет (это уже для удобства пользователя, чтобы он видел, какой именно сегмент выбрал). После этого пользователь выбирает цвет, и весь массив пикселей между этими координатами (границами) должен закраситься в этот цвет. Я так полагаю, все это придется делать средствами Canvas и JS. Если просчитывать координаты пикселей самого изображения средствами JS не получится, то можно использовать PHP в связке с Ajax (по-моему, PHP это может), чтобы все это дело было интерактивным. А вот само перекрашивание уже делать средствами JS на Canvas, передавая все координаты, обработанные PHP-скриптом. Как-то так. Конечно, тут может быть очень много подводных камней, особенно в определении координат, но я пока других вариантов не вижу совсем. У кого есть мысли, прошу поделиться. Спасибо.
Ответить с цитированием
  #3 (permalink)  
Старый 26.12.2014, 22:24
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

Всё можно делать на js в том числе попиксельно.(imageData)
И ты мудришь. К каждому изображению следует просто хранить готовое описание сегментов в векторном виде или в виде изображения-маски(чб), по которому уже накладывать цвет с нужной степенью смешивания.
__________________
29375, 35
Ответить с цитированием
  #4 (permalink)  
Старый 27.12.2014, 02:54
Интересующийся
Отправить личное сообщение для dmitriy94 Посмотреть профиль Найти все сообщения от dmitriy94
 
Регистрация: 20.12.2014
Сообщений: 24

Изображений будет очень много, и задавать для каждого описание или прописывать маску на CSS слишком затратно по времени (а маску придется задавать для каждого изображения, так как они все разные). Поэтому мне нужен алгоритм, который полностью автоматизирует эту работу. От клиента должна требоваться только отрисовка его изображений с нужными границами, на этом все. А работать потом в коде индивидуально с каждым изображением не реально - сопровождение будет не вечным. Но все равно, огромное спасибо, теперь хотя бы знаю, в какую сторону копать, и стоит ли копать вообще. Благодаря вам, наткнулся на интересную статью на хабре, как раз по этой теме. Кому интересно http://habrahabr.ru/post/233453/
Ответить с цитированием
  #5 (permalink)  
Старый 27.12.2014, 12:43
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

dmitriy94, клиенту тоже проще будет делать дополнительные файлы-маски, чем рисовать какие-то границы на исходном изображении.
__________________
29375, 35
Ответить с цитированием
  #6 (permalink)  
Старый 27.12.2014, 15:41
Интересующийся
Отправить личное сообщение для dmitriy94 Посмотреть профиль Найти все сообщения от dmitriy94
 
Регистрация: 20.12.2014
Сообщений: 24

Границы на изображении будут в любом случае, как бы, по умолчанию. Представьте, нужно отрисовать, к примеру, 1000 изображений. И еще столько же масок? Или проще границе, которая будет на изображении в любом случае, задать уникальный цвет?
Ответить с цитированием
  #7 (permalink)  
Старый 27.12.2014, 19:14
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,584

dmitriy94, разницы никакой. Маски делаются при отрисовке и просто сохраняются в отдельный файл. Если конечно работает дизайнер, а не Вася который знает в фотошопе две кнопки.
Вообще вопрос этот должен решаться вами совместно с тем кто будет рисовать. Напридумываете вы сейчас "удобных для рисовальщика" решений, а тот вас проклинать на каждой картинке будет.
__________________
29375, 35
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение цвета кнопки для каждого пользователя kade Общие вопросы Javascript 2 23.09.2014 19:46
Изменение цвета текста кнопки и цвета кнопки при нажатии Setta jQuery 22 31.07.2013 17:48
Изменение рабочей области изображения pagemaster Общие вопросы Javascript 19 15.04.2013 18:06
Как реализована изменение цвета фотографии? progress0477 jQuery 0 17.09.2012 17:17
Изменение изображения при наведении mishko_o Элементы интерфейса 4 24.10.2011 16:20