diff --git a/filtres/images_lib.php b/filtres/images_lib.php index b53d13fbbfbd97975b17547f749935f97ebf341a..0bfb11f23cf38b6db640bbe531a3ad1b00ec2bb1 100644 --- a/filtres/images_lib.php +++ b/filtres/images_lib.php @@ -290,6 +290,7 @@ function _couleur_hsl2rgb($H, $S, $L) { // renvoit sous la forme hexadecimale ("F26C4E" par exemple). // Par defaut, la couleur choisie se trouve un peu au-dessus du centre de l'image. // On peut forcer un point en fixant $x et $y, entre 0 et 20. +// si on passe 'moyenne' pour x alors une couleur moyenne est calculee sur les 20x20px // https://code.spip.net/@image_couleur_extraire function _image_couleur_extraire($img, $x = 10, $y = 6) { @@ -333,17 +334,54 @@ function _image_couleur_extraire($img, $x = 10, $y = 6) { imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); - do { - // get a color - $color_index = imagecolorat($thumb, $x, $y); - - // make it human readable - $color_tran = imagecolorsforindex($thumb, $color_index); - $x++; - $y++; - } while ($color_tran['alpha'] == 127 and $x < $newwidth and $y < $newheight); + if ($x === 'moyenne') { + $moyenne = null; + $nb_points = 0; + for ($x=0;$x<$newwidth;$x++) { + for ($y=0;$y<$newheight;$y++) { + // get a color + $color_index = imagecolorat($thumb, $x, $y); + // make it human readable + $color_tran = imagecolorsforindex($thumb, $color_index); + if ($color_tran['alpha'] != 127) { + if (is_null($moyenne)) { + $moyenne = $color_tran; + } + else { + $moyenne['red'] += $color_tran['red']; + $moyenne['green'] += $color_tran['green']; + $moyenne['blue'] += $color_tran['blue']; + } + $nb_points++; + } + } + } + if (is_null($moyenne)) { + $couleur = $defaut; + } + else { + if ($nb_points > 1) { + $moyenne['red'] = round($moyenne['red'] / $nb_points); + $moyenne['green'] = round($moyenne['green'] / $nb_points); + $moyenne['blue'] = round($moyenne['blue'] / $nb_points); + } - $couleur = _couleur_dec_to_hex($color_tran["red"], $color_tran["green"], $color_tran["blue"]); + $couleur = _couleur_dec_to_hex($moyenne["red"], $moyenne["green"], $moyenne["blue"]); + } + } + else { + do { + // get a color + $color_index = imagecolorat($thumb, $x, $y); + + // make it human readable + $color_tran = imagecolorsforindex($thumb, $color_index); + $x++; + $y++; + } while ($color_tran['alpha'] == 127 and $x < $newwidth and $y < $newheight); + + $couleur = _couleur_dec_to_hex($color_tran["red"], $color_tran["green"], $color_tran["blue"]); + } } else { $couleur = $defaut; } diff --git a/paquet.xml b/paquet.xml index b998953fab6567491ad2470572d69d536a1ea314..60c341fb1bc947938159a213e1c8312ea5548612 100644 --- a/paquet.xml +++ b/paquet.xml @@ -1,7 +1,7 @@ <paquet prefix="images" categorie="multimedia" - version="2.1.1" + version="2.1.2" etat="stable" compatibilite="[3.3.0-dev;3.3.*]" logo="images/image_filtre-32.png"