Frage

Ich mache eine ODP-> HTML-Konvertierung mit PHP. Ich habe Probleme mit Folgendem:

Verwenden Sie den Stil: Verwenden Sie die Eigenschaft von Window-Font-Farben, um anzugeben, ob die Vordergrundfarbe des Fensters so genauso wie die Vordergrundfarbe für eine helle Hintergrundfarbe und weiß für eine dunkle Hintergrundfarbe verwendet werden sollte.

(Opendocument Specification Version 1.0, 15.4.4)

Wenn ich ein Hintergrundbild habe, wie überprüfe ich, wenn dieses Bild hell oder dunkel ist?

Hast du eine Idee?

Danke im Voraus, Levu

War es hilfreich?

Lösung

Ich fand dies ein ziemlich interessantes Problem, also habe ich ein kurzes Drehbuch gehackt, um es zu tun. Befolgen Sie die anderen vorgelegten Vorschläge

<?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;
    }

Andere Tipps

Sie könnten möglicherweise einen Bildverarbeitungsalgorithmus verwenden, der die Pixelhelligkeit untersucht und die mittlere Bildhelligkeit berechnet.

In diesem Dokument können Sie den Einstieg bringen:

http://www.kweii.com/site/color_theory/2007_lv/brightnesscalculation.pdf

Wenn Sie GD verwenden möchten, versuchen Sie es zu verwenden imagecolorat Pixel des Bildes probieren. Sie können den RGB der Farbe wie auf der PHP -Man -Seite gezeigt ermitteln.

Nehmen Sie als nächstes die RGB -Probe (n) und bestimmen Sie ihre Helligkeit mit a Basis -Luminanzformel.

Bestimmen Sie einen Schwellenwert für das, was Sie für hell und dunkel halten, und kategorisieren Sie entsprechend.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top