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) :
// Filtre |image_superpose
function image_superpose($im, $masque, $pos="") {
include_spip('inc/filtres_images');
$numargs = func_num_args();
$arg_list = func_get_args();
$texte = $arg_list[0];
for ($i = 1; $i < $numargs; $i++) {
if ( ($p = strpos($arg_list[$i],"=")) !==false) {
$nom_variable = substr($arg_list[$i], 0, $p);
$val_variable = substr($arg_list[$i], $p+1);
$variable["$nom_variable"] = $val_variable;
$defini["$nom_variable"] = 1;
}
}
$pos = md5(serialize($variable));
$fonction = array('image_superpose', func_get_args());
$image = image_valeurs_trans($im, "superpose-$masque-$pos", "png",$fonction);
if (!$image) return("");
$x_i = $image["largeur"];
$y_i = $image["hauteur"];
$im = $image["fichier"];
$dest = $image["fichier_dest"];
$creer = $image["creer"];
if ($defini["right"] OR $defini["left"] OR $defini["bottom"] OR $defini["top"] OR $defini["text-align"] OR $defini["vertical-align"]) {
$placer = true;
}
else $placer = false;
if ($creer) {
$im = $image["fonction_imagecreatefrom"]($im);
$masque = find_in_path($masque);
$mask = image_valeurs_trans($masque,"");
if (!is_array($mask)) return("");
$im_m = $mask["fichier"];
$x_m = $mask["largeur"];
$y_m = $mask["hauteur"];
// LES VALEURS PAR DEFAUT DES OPTIONS
// opacite
// Opacite de l'image (Valeurs: entre 0 et 100).
if (!$defini["opacite"]) {
$variable["opacite"] = 100;
}
// align_h
// Alignment horizontal (Valeurs: 'left' | 'right' | 'center').
if (!$defini["align_h"]) {
$variable["align_h"] = "left";
}
// align_v
// Alignment vertical (Valeurs: 'top' | 'bottom' | 'center').
if (!$defini["align_v"]) {
$variable["align_v"] = "bottom";
}
// margin
// Excentrage a partir du bord (Valeurs: en pixels).
if (!$defini["margin"]) {
$variable["margin"] = 10;
}
$im1 = $mask["fonction_imagecreatefrom"]($masque);
// On force le fait de garder la transparence du fichier meme si c'est un png (peut etre n'est ce pas necessaire)
if ($mask["format_source"] == ("gif" || "png") AND function_exists('ImageCopyResampled')) {
$im1_ = imagecreatetruecolor($x_m, $y_m);
// Si un GIF est transparent,
// fabriquer un PNG transparent
// Conserver la transparence
if (function_exists("imageAntiAlias")) imageAntiAlias($im1_,true);
@imagealphablending($im1_, false);
@imagesavealpha($im1_,true);
@ImageCopyResampled($im1_, $im1, 0, 0, 0, 0, $x_m, $y_m, $x_m, $y_m);
imagedestroy($im1);
$im1 = $im1_;
}
if ($im1) {
$superpose_y = $variable["margin"];
if ($variable["align_v"] == 'top') {
$superpose_y = $variable["margin"];
}
elseif ($variable["align_v"] == 'bottom') {
$superpose_y = $y_i - $y_m - $variable["margin"];
}
elseif ($variable["align_v"] == 'center') {
$superpose_y = (int)($y_i / 2 - $y_m / 2);
}
$superpose_x = $variable["margin"];
if ($variable["align_h"] == 'left') {
$superpose_x = $variable["margin"];
}
elseif ($variable["align_h"] == 'right') {
$superpose_x = $x_i - $x_m - $variable["margin"];
}
elseif ($variable["align_h"] == 'center') {
$superpose_x = (int)($x_i / 2 - $x_m / 2);
}
imagecopymerge($im,$im1, $superpose_x, $superpose_y, 0, 0, $x_m, $y_m, $variable["opacite"]);
imagedestroy($im1);
}
$image["fonction_image"]($im, "$dest");
imagedestroy($im);
}
$x_dest = largeur($dest);
$y_dest = hauteur($dest);
return image_ecrire_tag($image,array('src'=>$dest,'width'=>$x_dest,'height'=>$y_dest));
}
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
Aucune discussion
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Suivre les commentaires : |