Фоновое изображение темное или светлое?

Я делаю преобразование ODP-> HTML с PHP. У меня проблемы со следующим:

Используйте свойство style: use-window-font-color, чтобы указать, должен ли цвет переднего плана окна использоваться как цвет переднего плана для цвета фона фона и белый для темного цвета фона.

(Спецификация OpenDocument версии 1.0, 15.4.4)

Если у меня есть фоновое изображение, как я могу проверить, если это изображение светлое или темное?

У тебя есть идеи?

Спасибо заранее, Levu

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

<?php // TODO supply your own filenames $filenames = array( 'testpics/client-bella-vi.jpg', 'testpics/istockphoto_8577991-concept-of-business-people-crowd.jpg', 'testpics/medium-gray.jpg'); // loop though each file foreach ($filenames as $filename) { echo "$filename<br/>"; $luminance = get_avg_luminance($filename,10); echo "AVG LUMINANCE: $luminance<br />"; // assume a medium gray is the threshold, #acacac or RGB(172, 172, 172) // this equates to a luminance of 170 if ($luminance > 170) { echo "Black Text<br />"; } else { echo 'White Text<br />'; } echo "<br />"; } exit; // get average luminance, by sampling $num_samples times in both x,y directions function get_avg_luminance($filename, $num_samples=10) { $img = imagecreatefromjpeg($filename); $width = imagesx($img); $height = imagesy($img); $x_step = intval($width/$num_samples); $y_step = intval($height/$num_samples); $total_lum = 0; $sample_no = 1; for ($x=0; $x<$width; $x+=$x_step) { for ($y=0; $y<$height; $y+=$y_step) { $rgb = imagecolorat($img, $x, $y); $r = ($rgb >> 16) & 0xFF; $g = ($rgb >> 8) & 0xFF; $b = $rgb & 0xFF; // choose a simple luminance formula from here // http://stackoverflow.com/questions/596216/formula-to-determine-brightness-of-rgb-color $lum = ($r+$r+$b+$g+$g+$g)/6; $total_lum += $lum; // debugging code // echo "$sample_no - XY: $x,$y = $r, $g, $b = $lum<br />"; $sample_no++; } } // work out the average $avg_lum = $total_lum/$sample_no; return $avg_lum; } 

вы могли бы использовать некоторый алгоритм обработки изображений, который бы исследовал яркость пикселей и вычислил среднюю яркость изображения.

этот документ поможет вам начать:

http://www.kweii.com/site/color_theory/2007_LV/BrightnessCalculation.pdf

Если вы хотите использовать GD, imagecolorat использовать imagecolorat для выборки пикселей изображения. Вы можете определить RGB цвета, как показано на странице руководства PHP.

Затем возьмите образец (ы) RGB и определите их яркость, используя базовую формулу яркости .

Определите пороговое значение для того, что вы считаете светом против темноты и категоризируете соответственно.