Цвет, тёмный или светлый? Определение яркости цвета по его #ХХХХХХ значению.

faustmax

Новичок
Цвет, тёмный или светлый? Определение яркости цвета по его #ХХХХХХ значению.

Мне нужно определить являеться картинка в целом тёмной или светлой, или же, хотя бы знать, что она неоднородна по цвету. Для чего это нужно, я вывожу текст поверх картинки, которая стоит в бекграунде и мне нужно знать выводить текст светлым шрифтом или тёмным.

Узнать цвет выборочно нескольких пикселей можно с помощью функции imagecolorat, а вот как узнать, являеться ли данной полученное значение «темным» или «светлым»? Еще лучше было бы знать какой канал в ней преобладает (красный, зеленый или синий).
 

an_kalinovski

Новичок
Предлагаю такое решение - получаешь три значения цвета rgb и из каждого получаешь новые значения путем вычитания из 255 (например если картинка абсолютно черная - 0 0 0 то ты получишь белый цвет (255, 255, 255) так вот: 255-0 255-0 255-0 ). Принцип инвертирования цвета.
 

que_bunt

Новичок
имееем цвет: #ABCDEF.
чтобы узнать какой канал преобладает надо разбить эту строку по переменным:
$red=AB;
$green=CD;
$blue=EF;
и затем сравниваем эти значения как шестнадцятиричные числа.


насчет светлый или темный - вопрос посложнее.
скорее всего что-то типа если хоть одно(скорее два) из значений A,B,C,D,E,F больше 8 то цвет темный иначе светлый.
возможно есть лучшие алгоритмы, просто прикинул.

-~{}~ 06.10.06 18:22:

an_kalinovski хорошо придумано, сразу такое мне в голову не пришло.
 

Денч

Новичок
Может распечатать и посмотреть?
И определить, где какие тона, прям в коде.
PHP:
<html>
<body>
<?
   $colors = array(0,1,2,3,4,5,6,7,8,9,'a','b','c','d','e','f');
   ?><table><?

   for($i=0; $i<15; $i++)
   {
      ?><tr><?
      $a=$colors[$i];
      for($ii=0; $ii<15; $ii++)
      {
         $b = $colors[$ii];
         for($iii=0; $iii<15; $iii++)
         {
            $c=$colors[$iii];
            ?><td bgcolor="#<?echo $a.$a.$b.$b.$c.$c?>">
                   <? echo $a.$a.$b.$b.$c.$c?>
              </td><?
         }
      }
      ?></tr><?
   }
   ?></table><?
?>
</body>
</html>
-~{}~ 06.10.06 20:26:

an_kalinovski
Да, так будет лучше...
 

Igor aka TiGR

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

nerezus

Вселенский отказник
сделай куб(FFxFFxFF) и заполни его. По осям - значения каждой составляющей. Потом что делать, я еще не придумал ) Корроче зависимость найдешь )
 

que_bunt

Новичок
Vladson можно узнать откуда эти цыфры(0.3; 0.59; 0.11)?
и заодно: причем матчасть именно к этим цыфрам? неужили ты их нашол сложным математическим методом? =)
 

que_bunt

Новичок
вот именно, а Vladson видимо хочет сказать что он узнал о них из курса мат.части.

-~{}~ 06.10.06 19:23:

или это просто мода пошла на фразу "учите мат.часть"...(вопрос риторический)
 

Vladson

Сильнобухер
Мат-часть было сказано "фигурально" а числа эти учат в школе на уроках физики (точно не помню в каком классе, вроде в первый-же год)
 

que_bunt

Новичок
хм... сомневаеться мне, но возможно я был невнимательным на уроках. ладно.
за формулу всеравно спасибо.
 

dr-sm

Новичок
может быть все-таки такое преобразование:
RGB => Hue/Saturation/Lightness
матчасть: http://local.wasp.uwa.edu.au/~pbourke/colour/hsl/
а? :)
 

phprus

Moderator
Команда форума
Vladson
а числа эти учат в школе на уроках физики
Сейчас видимо уже не учат. По крайней мере я не помню чтобы нам о них говорили. (Школу я закончил в этом году).
 

Vladson

Сильнобухер
nerezus
phprus
Не знаю где вы учились, но у нас учили.
Это небыло основной темой, просто когда проходили какую-то тему где что-то говорилось про свет приводилась эта формула как какой-то пример чего-то (я и сам не помню точно, давно это было).
 

phprus

Moderator
Команда форума
Vladson
Для справки:
Я учился сначала в обычной школе (до 9-го класса. Нам про это в ней ничего не говорили). Потом я 10 и 11 классы учился в Лицее№2 при ПГУ (я живу в Перми) в классе с углубленным изучением физики и нам там тоже про это ничего не говорили. Так что чейчас этому не учат по крайней мере в Перми.
 
Сверху