Я хочу, чтобы PHP использовал HTML-тег style, чтобы каждая отдельная страница имела свой цвет в заголовке. , для каждой страницы, соответствующей оттенку одного из наиболее преобладающих цветов изображения, затем увеличьте значение HSV до 100 % и установите насыщенность в HSV на 50 %, так что у меня есть «светлый цвет», оттенок которого соответствует изображение.
Пример трех исходных страниц
На этих изображениях все заголовки имеют один и тот же цвет (не соответствует фоновому фото):


Анализ цвета
В человеческом зрении на любой фотографии, на которую вы смотрите, есть несколько «преобладающих цветов». Это пример того, как мы видим «самые важные цвета» на трех фотографиях выше:
[img]https://i. sstatic.net/O9xisDM1l.png[/img]


Желаемый результат
Если в инспекторе браузера я выбираю «бежевый» в Китае, «оранжевый» в Индии и «зеленоватый» в Коста-Рике, поднимаю V до 100% и устанавливаю S на 50% и получаю желаемый результат:



Вопрос
Как я могу сделать это программно?
Расследование на данный момент
Один из способов сделать это:
- Использовать одно из популярных расширений/библиотек изображений, например ImageMagik или GD, для извлечения гистограммы. .
- Гистограмма возвращает набор пикселей, каждый из которых имеет один заданный RGB и количество появлений на изображении.
- Используйте гистограмму RGB для расчета модели HSV.
- Прокрутите список HSV и посмотрите только на оттенок (H) и создайте новую гистограмму, которая накапливает оттенки, игнорируя S и V. Поэтому, если наши оттенки варьируются от 0 до 359, и мы работаем только с целыми числами, в итоге мы получим массив индексов от 0 до 359, значения которых представляют собой «количество пикселей в изображении, имеющих этот оттенок».
- Еще очень близкие оттенки должны быть «сгруппированы». Если я получу «оттенок 200 => 1000 пикселей, оттенок 201 => 1000 пикселей», это более важно, чем если я получу «оттенок 300 => 1500 пикселей и никакие близлежащие оттенки не обнаружены», потому что с человеческой точки зрения, 200 и 201 можно сгруппировать вместе. Это легко сделать в простых гистограммах, но это самая сложная часть в очень сложных гистограммах.
- При кластеризации нам также необходимо позаботиться о опрокидывании . Предполагая, что H имеет домен от 0 до 359, тогда 360 = 0. Таким образом, оттенки 358, 359, 0 и 1 могут быть сгруппированы вместе.
- Сортировка кластеров оттенков по количеству пикселей.< /li>
Используйте оттенок самого, второго или даже третьего по полноте кластера в качестве основы для окончательного цвета.
Тем не менее, я чувствую, что все это слишком громоздко, и мне интересно, есть ли более простое решение или библиотека с открытым исходным кодом для достижения того, что мне нужно в PHP. Мой внутренний вопрос: существует ли какая-либо графическая библиотека с открытым исходным кодом для PHP, в которую я могу передать изображение и вернуть кластеризованную гистограмму?
Если нет, какой алгоритм лучше всего «сгруппировать» преобладающие оттенки?
Подробнее здесь: https://stackoverflow.com/questions/787 ... age-in-php
Мобильная версия