Question

Je fais une conversion ODP> HTML avec PHP. J'ai des problèmes avec les éléments suivants:

Utilisez le style: use-fenêtre-font-couleur propriété pour spécifier si oui ou non la fenêtre couleur de premier plan doit être aussi utilisé comme la couleur de premier plan pour une couleur de fond clair et blanc pour un sombre couleur de fond.

(OpenDocument spécification version 1.0, 15.4.4)

Si j'ai une image de fond, comment puis-je vérifier, si cette image est claire ou foncée?

Avez-vous des idées?

Merci à l'avance, Levu

Était-ce utile?

La solution

Je pensais que cela était tout à fait un problème intéressant à résoudre, donc je piraté un script rapide pour le faire. suivant les autres suggestions fournies

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

Autres conseils

vous pouvez éventuellement utiliser un algorithme de traitement d'image qui examinerait la luminosité de pixel et de calculer la luminosité de l'image moyenne.

ce document pour vous lancer:

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

Si vous cherchez à utiliser GD, essayer en utilisant imagecolorat pixels échantillons de l'image. Vous pouvez déterminer le RVB de la couleur comme indiqué sur la page de manuel PHP.

Ensuite, prélever l'échantillon RGB (s) et déterminer leur luminosité à l'aide d'un formule de luminance de base .

Déterminez un seuil pour ce que vous considérez sombre lumière par rapport et catégoriser en conséquence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top