Как определить средний цвет? Берём и делаем thumbnail в один пиксель а потом считываем цвет этого пикселя. Храним в СУБД в виде 3 столбцов.
Поиск можно тупо работает быстро:
Для where что то такое: «color_r>:cr-:ck and color_r<:cr+:ck and color_g>:cg-:ck and color_g<:cg+:ck and color_b>:cb-:ck and color_b<:cb+:ck»
Для order by: «sqrt(2*abs(color_r-:cr)*abs(color_r-:cr) + 4*abs(color_g-:cg)*abs(color_g-:cg) + 3*abs(color_b-:cb)*abs(color_b-:cb))»
У меня на сайте
anime-pictures.net/pictures/view_posts/0?lang=ru так сделано.