PHP: функция для классификации HTML-шестнадцатеричных цветов в пару простых строковых значений - PullRequest
0 голосов
/ 13 декабря 2011

Можно ли классифицировать HTML-шестнадцатеричные цвета на простые строковые значения ??

Например, цвет # CC3333, он не полностью красный, но как человек мы можем предположить, что он красный.Цвет #CCCCCC можно классифицировать как белый, потому что я не хочу, чтобы черный или серый включались.

Возможные простые значения, по крайней мере, состоят из:

  • красный
  • белый
  • зеленый

Больше классификации лучше, но я хочу по крайней мере эти цвета.

Можно ли это сделать?

Дополнительная информация:

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

Ответы [ 3 ]

2 голосов
/ 13 декабря 2011

Это несколько субъективный вопрос, потому что да, это может быть сделано, но то, как именно вы это сделаете, будет зависеть от вашего конкретного применения - сам цвет очень субъективен в том, как он наблюдается человеком.

Вам нужно начать с разделения строки на красные, зеленые и синие компоненты:

$colourId = 'CC3333';
list($red, $green, $blue) = str_split($colourId, 2);

Тогда, возможно, было бы неплохо преобразовать их в целые числа:

$red = hexdec($red);
$green = hexdec($green);
$blue = hexdec($blue);

Затем вам нужно применить какую-то логику к нему, чтобы определить, к какому из ваших классов он относится. Как это сделать, зависит от вас, но, возможно, вы могли бы сделать что-то вроде этого:

if (max($red, $green, $blue) - min($red, $green, $blue) < 10) {
  // If the values are all within a range of 10, we'll call it white
  $class = 'white'; 
} else if (max($red, $green, $blue) == $red) {
  // If red is the strongest, call it red
  $class = 'red'; 
} else if (max($red, $green, $blue) == $green) {
  // If green is the strongest, call it green
  $class = 'green'; 
} else if (max($red, $green, $blue) == $blue) {
  // If blue is the strongest, call it blue
  $class = 'blue'; 
}
0 голосов
/ 13 декабря 2011

Сначала необходимо преобразовать шестнадцатеричный формат в значения rgb. Простой поиск Google обнаружил эту страницу . Я не проверял его, но если он не работает правильно, то я уверен, что вы можете найти другой, который работает.

Когда у вас есть значения rgb, вам нужно определить цветовые диапазоны. Следующий код создает цветовые диапазоны на каждом интервале 63,75 (это 4 диапазона на цвет, поэтому 4 * 4 * 4 = 64 общих диапазона):

function findColorRange($colorArray){

    //assume $colorArray has the format [r,g,b], where r, g, and b are numbers in the range 0 - 255

    for($i = 0; $i < 256; $i += 51){ //find red range first
        if($colorArray[0] <= $i + 51/2 && $colorArray[0] >= $i - 51/2){
            for($n = 51; $n < 256; $n += 51){ //green
                if($colorArray[1] <= $n + 51/2 && $colorArray[1] >= $n - 51/2){
                    for($z = 51; $z < 256; $z += 51){ //blue
                        if($colorArray[2] <= $z + 51/2 && $colorArray[2] >= $z - 51/2){
                            return array($i,$n,$z);
                        }
                    }
                }
            }
        }
    }
}

Приведенная выше функция возвращает массив, который определяет цветовую гамму рассматриваемого цвета. Оттуда вы можете отобразить возможные диапазоны на любые строки, которые вы хотите. Этого, вероятно, легче всего достичь путем создания ассоциативного массива, где ключами являются значения r, g, b, а значения - строка. Например:

$colorMap = array(
    '0,0,0' => 'white',
    '51,0,0' => 'light gray'
)
0 голосов
/ 13 декабря 2011

трудно классифицировать цвет в модели RGB, лучше преобразовать цвет в модель HSL или HSV, а затем классифицировать цвет.Для получения дополнительной информации вы можете посмотреть на http://en.wikipedia.org/wiki/Color_model

...