Вопрос

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

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

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

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

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

Заранее спасибо, леву

Это было полезно?

Решение

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

<?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 Чтобы попробовать пиксели изображения. Вы можете определить RGB цвета, как показано на странице PHP Man.

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top