SPIP - Contrib

[ar] [en] [es] [fr] [it]



Accueil du site > Images, Galeries > Traitement d’images > Images superposées

Filtre image_superpose

mardi 19 février 2008, par kent1. Dernier ajout vendredi 22 février 2008


Filtre qui superpose 2 images


Ce filltre superpose tout simplement une image sur une image source issue de la base de donnée de SPIP.

Avant

Après

Le code

Le code qui suit est à mettre dans votre fichier « mes_fonctions.php » (à créer s’il n’existe pas) :

  1.  
  2. // Filtre |image_superpose
  3.  
  4. function image_superpose($im, $masque, $pos="") {
  5.         include_spip('inc/filtres_images');
  6.  
  7.         $numargs = func_num_args();
  8.         $arg_list = func_get_args();
  9.         $texte = $arg_list[0];
  10.         for ($i = 1; $i < $numargs; $i++) {
  11.                 if ( ($p = strpos($arg_list[$i],"=")) !==false) {
  12.                         $nom_variable = substr($arg_list[$i], 0, $p);
  13.                         $val_variable = substr($arg_list[$i], $p+1);
  14.                         $variable["$nom_variable"] = $val_variable;
  15.                         $defini["$nom_variable"] = 1;
  16.                 }
  17.         }
  18.        
  19.         $pos = md5(serialize($variable));
  20.  
  21.         $fonction = array('image_superpose', func_get_args());
  22.         $image = image_valeurs_trans($im, "superpose-$masque-$pos", "png",$fonction);
  23.         if (!$image) return("");
  24.        
  25.         $x_i = $image["largeur"];
  26.         $y_i = $image["hauteur"];
  27.  
  28.         $im = $image["fichier"];
  29.         $dest = $image["fichier_dest"];
  30.        
  31.         $creer = $image["creer"];
  32.  
  33.         if ($defini["right"] OR $defini["left"] OR $defini["bottom"] OR $defini["top"] OR $defini["text-align"] OR $defini["vertical-align"]) {
  34.                 $placer = true;
  35.         }
  36.         else $placer = false;      
  37.  
  38.         if ($creer) {
  39.                         $im = $image["fonction_imagecreatefrom"]($im);
  40.        
  41.                         $masque = find_in_path($masque);
  42.                         $mask = image_valeurs_trans($masque,"");
  43.                
  44.                         if (!is_array($mask)) return("");
  45.                         $im_m = $mask["fichier"];
  46.                         $x_m = $mask["largeur"];
  47.                         $y_m = $mask["hauteur"];
  48.  
  49.                         // LES VALEURS PAR DEFAUT DES OPTIONS
  50.                        
  51.                         // opacite
  52.                         // Opacite de l'image (Valeurs: entre 0 et 100).
  53.                         if (!$defini["opacite"]) {
  54.                                 $variable["opacite"] = 100;
  55.                         }
  56.        
  57.                         // align_h
  58.                         // Alignment horizontal (Valeurs: 'left' | 'right' | 'center').
  59.                         if (!$defini["align_h"]) {
  60.                                 $variable["align_h"] = "left";
  61.                         }
  62.                         // align_v
  63.                         // Alignment vertical (Valeurs: 'top' | 'bottom' | 'center').
  64.                         if (!$defini["align_v"]) {
  65.                                 $variable["align_v"] = "bottom";
  66.                         }
  67.        
  68.                         // margin
  69.                         // Excentrage a partir du bord (Valeurs: en pixels).
  70.                         if (!$defini["margin"]) {
  71.                                 $variable["margin"] = 10;
  72.                         }
  73.        
  74.                         $im1 = $mask["fonction_imagecreatefrom"]($masque);
  75.                        
  76.                         // On force le fait de garder la transparence du fichier meme si c'est un png (peut etre n'est ce pas necessaire)
  77.                         if ($mask["format_source"] == ("gif"  || "png") AND function_exists('ImageCopyResampled')) {
  78.                                 $im1_ = imagecreatetruecolor($x_m, $y_m);
  79.                                 // Si un GIF est transparent,
  80.                                 // fabriquer un PNG transparent
  81.                                 // Conserver la transparence
  82.                                 if (function_exists("imageAntiAlias")) imageAntiAlias($im1_,true);
  83.                                 @imagealphablending($im1_, false);
  84.                                 @imagesavealpha($im1_,true);
  85.                                 @ImageCopyResampled($im1_, $im1, 0, 0, 0, 0, $x_m, $y_m, $x_m, $y_m);
  86.                                 imagedestroy($im1);
  87.                                 $im1 = $im1_;
  88.                         }
  89.  
  90.                         if ($im1) {
  91.                                 $superpose_y = $variable["margin"];
  92.                                 if ($variable["align_v"] == 'top') {
  93.                                                 $superpose_y = $variable["margin"];
  94.                                 }
  95.                                 elseif ($variable["align_v"] == 'bottom') {
  96.                                         $superpose_y = $y_i - $y_m - $variable["margin"];
  97.                                 }
  98.                                 elseif ($variable["align_v"] == 'center') {
  99.                                         $superpose_y = (int)($y_i / 2 - $y_m / 2);
  100.                                 }
  101.        
  102.                                 $superpose_x = $variable["margin"];
  103.                                 if ($variable["align_h"] == 'left') {
  104.                                         $superpose_x = $variable["margin"];
  105.                                 }
  106.                                 elseif ($variable["align_h"] == 'right') {
  107.                                         $superpose_x = $x_i - $x_m - $variable["margin"];
  108.                                 }
  109.                                 elseif ($variable["align_h"] == 'center') {
  110.                                         $superpose_x = (int)($x_i / 2 - $x_m / 2);
  111.                                 }
  112.                         imagecopymerge($im,$im1, $superpose_x, $superpose_y, 0, 0, $x_m, $y_m, $variable["opacite"]);
  113.                         imagedestroy($im1);
  114.                 }
  115.                 $image["fonction_image"]($im, "$dest");
  116.                         imagedestroy($im);
  117.                 }
  118.         $x_dest = largeur($dest);
  119.         $y_dest = hauteur($dest);
  120.        
  121.         return image_ecrire_tag($image,array('src'=>$dest,'width'=>$x_dest,'height'=>$y_dest));
  122. }

Utilisation

Dans un squelette placez le code qui suit :

[(#FICHIER|image_superpose{votre_image.png, align_v=top,align_h=right,opacite=50})]

Les options

 :

  • align_v : top | center | bottom : alignement vertical de l’image superposée par rapport à l’image originale
  • align_h : left | center | right : alignement horizontal de l’image superposée par rapport à l’image originale
  • opacite : niveau d’opacite de l’image superposée (de 0 à 100)
  • margin : marge autour de l’image superposée

Répondre à cet article



Suivre la vie du site RSS 2.0 | Plan du site | Espace privé | Charte et vie SPIP-Contrib | SPIP | L'autre.net