Як визначити колір, близький до кольору з існуючого списку (php)
Перекладаємо число з HEX.
І тепер ми можемо обчислити відстань між кольорами за формулою: d=sqrt((r2-r1)^2+(g2-g1)^2+(b2-b1)^2)
По відстані знаходимо найближчий колір.
Ще як варіант - перевести колір HSV і порівнювати за середнім значенням компоненти HUE. Якщо у вас велика палітра, то буде дешевше в плані обчислень один раз перевести RGB HSV і потім вважати тільки середнє значення.
для картинки можна зробити простіше - нехай функція getClosestColor повертатиме індекс кольору з палітри. Так простіше організувати підрахунок і ми так само знаємо на який колір замінювати.
Виходячи з відповіді @Fesor і Wiki накидав якийсь код (не дуже швидко працює, особливо для великих картинок, але має право на життя):
Як варіант замість: $result[$i] = $colors[$i];
Да я зрозумів. Шлях виконання приблизно такий:
Що у нас є? Масив з базовими кольорами:
Перш ніж знайти щось (у цій ситуації картинки), їх потрібно залити. Сподіваюся заливання буде через web-форму, а не через ftp (у випадку з ftp доведеться раз пробігтися скриптом по вже завантаженим картинкам). Під час заливки зображення записуємо в базу індекси всіх кольорів, які ми отримаємо, прогнавши картинку через скрипт
Пошук за кольором: 1. наприклад, вибрали колір "#ff00ff" => індекс - 2. 2. робимо вибірку по базі: витягнути всі картинки, у яких є індекс кольору "2"