Skip to content
Extraits de code Groupes Projets
Valider 111c68e9 rédigé par cedric@yterium.com's avatar cedric@yterium.com
Parcourir les fichiers

Extension des filtres |image_xx a SVG :

|image_reduire
|image_passe_partout
|image_recadre
|image_aplatir (conserve un svg mais applique le background)
|image_format (conserve un svg mais applique le background)
|image_alpha
|image_flip_vertical
|image_flip_horizontal
|image_flou
|image_nb
|image_sepia
|image_gamma
|image_rotation
|couleur_extraire  (extrait une moyenne des couleurs referencees dans le SVG, sans notion de leur importance visuelle)

avec la réserve que pour certains filtres (flou, sepia, nb) il faut que le navigateur supporte bien les CSS filters dans les SVG :seul FF le supporte actuellement - dans les navigateurs qui ne le supportent pas l’effet est juste ignoré.
(Il semble être possible d’utiliser des features filter avancées des SVG qui sont mieux supportées mais je n’ai pas creusé dans cette voie)

les filtres qui ne supportent pas le SVG (et sont donc sans effet) sont :

|image_masque (on devrait pouvoir porter une partie des fonctionnalités mais c’est plus compliqué)
|image_renforcement (sans objet?)
|image_fond_transparent (sans objet)
|image_imagick (sans objet)
|image_recadre_mini (sans objet)
parent 680f956d
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -303,84 +303,97 @@ function _image_couleur_extraire($img, $x = 10, $y = 6) { ...@@ -303,84 +303,97 @@ function _image_couleur_extraire($img, $x = 10, $y = 6) {
// valeur par defaut si l'image ne peut etre lue // valeur par defaut si l'image ne peut etre lue
$defaut = "F26C4E"; $defaut = "F26C4E";
$cache = _image_valeurs_trans($img, "coul-$x-$y", "txt"); $image = _image_valeurs_trans($img, "coul-$x-$y", "txt",null,false,_SVG_SUPPORTED);
if (!$cache) { if (!$image) {
return $couleur_extraite["$img-$x-$y"] = $defaut; return $couleur_extraite["$img-$x-$y"] = $defaut;
} }
$fichier = $cache["fichier"]; $fichier = $image["fichier"];
$dest = $cache["fichier_dest"]; $dest = $image["fichier_dest"];
if (isset($couleur_extraite["$fichier-$x-$y"])) { if (isset($couleur_extraite["$fichier-$x-$y"])) {
return $couleur_extraite["$fichier-$x-$y"]; return $couleur_extraite["$fichier-$x-$y"];
} }
$creer = $cache["creer"]; $creer = $image["creer"];
if ($creer) { if ($creer) {
if (@file_exists($fichier)) { if (@file_exists($fichier)) {
$width = $cache["largeur"]; if ($image['format_source'] === 'svg'){
$height = $cache["hauteur"]; $couleur="eeddcc";
$couleurs = svg_extract_couleurs($fichier);
$newwidth = 20; $couleurs = array_map('svg_couleur_to_rgb', $couleurs);
$newheight = 20;
$totalRed = array_sum(array_column($couleurs, 'red'));
$thumb = imagecreate($newwidth, $newheight); $totalGreen = array_sum(array_column($couleurs, 'green'));
$totalBlue = array_sum(array_column($couleurs, 'blue'));
$source = $cache["fonction_imagecreatefrom"]($fichier); $n = count($couleurs);
$couleur = _couleur_dec_to_hex(round($totalRed / $n), round($totalGreen / $n), round($totalBlue / $n));
imagepalettetotruecolor($source); }
else {
imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height); $width = $image["largeur"];
$height = $image["hauteur"];
if ($x === 'moyenne') {
$moyenne = null; $newwidth = 20;
$nb_points = 0; $newheight = 20;
for ($x=0;$x<$newwidth;$x++) {
for ($y=0;$y<$newheight;$y++) { $thumb = imagecreate($newwidth, $newheight);
// get a color
$color_index = imagecolorat($thumb, $x, $y); $source = $image["fonction_imagecreatefrom"]($fichier);
// make it human readable
$color_tran = imagecolorsforindex($thumb, $color_index); imagepalettetotruecolor($source);
if ($color_tran['alpha'] != 127) {
if (is_null($moyenne)) { imagecopyresized($thumb, $source, 0, 0, 0, 0, $newwidth, $newheight, $width, $height);
$moyenne = $color_tran;
} if ($x === 'moyenne') {
else { $moyenne = null;
$moyenne['red'] += $color_tran['red']; $nb_points = 0;
$moyenne['green'] += $color_tran['green']; for ($x=0;$x<$newwidth;$x++) {
$moyenne['blue'] += $color_tran['blue']; 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++;
} }
$nb_points++;
} }
} }
} if (is_null($moyenne)) {
if (is_null($moyenne)) { $couleur = $defaut;
$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);
} }
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($moyenne["red"], $moyenne["green"], $moyenne["blue"]); $couleur = _couleur_dec_to_hex($moyenne["red"], $moyenne["green"], $moyenne["blue"]);
}
} }
} else {
else { do {
do { // get a color
// get a color $color_index = imagecolorat($thumb, $x, $y);
$color_index = imagecolorat($thumb, $x, $y);
// make it human readable // make it human readable
$color_tran = imagecolorsforindex($thumb, $color_index); $color_tran = imagecolorsforindex($thumb, $color_index);
$x++; $x++;
$y++; $y++;
} while ($color_tran['alpha'] == 127 and $x < $newwidth and $y < $newheight); } 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"]); $couleur = _couleur_dec_to_hex($color_tran["red"], $color_tran["green"], $color_tran["blue"]);
}
} }
} else { } else {
$couleur = $defaut; $couleur = $defaut;
......
Ce diff est replié.
...@@ -774,7 +774,7 @@ function produire_image_typo() { ...@@ -774,7 +774,7 @@ function produire_image_typo() {
} }
$dimensions = getimagesize($image); $dimensions = spip_getimagesize($image);
$largeur = $dimensions[0]; $largeur = $dimensions[0];
$hauteur = $dimensions[1]; $hauteur = $dimensions[1];
......
<paquet <paquet
prefix="images" prefix="images"
categorie="multimedia" categorie="multimedia"
version="2.1.2" version="2.2.0"
etat="stable" etat="stable"
compatibilite="[3.3.0-dev;3.3.*]" compatibilite="[3.3.0-dev;3.3.*]"
logo="images/image_filtre-32.png" logo="images/image_filtre-32.png"
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Veuillez vous inscrire ou vous pour commenter