[spip-dev] Nouvelle fonction graphique: pour le core, ou en plugin?

Salut,

Je viens de faire une nouvelle fonction graphique: image_joindre.

Elle permet de joindre deux images dans une seule image, placées l'une à côté de l'autre. On peut placer la deuxième image à droite, à gauche, en haut ou en bas de la première image.

L'intérêt principal de cette fonction est de permettre la gestion de rollovers basés sur le décalage d'une image unique, ce qui évite les effets pénibles liés aux images qui ne s'affichent pas ou qui mettent du temps à se charger.

Je joins la fonction ci-dessous, pour que vous voyez que ça n'est pas de la haute technologie (donc risque de bug faible).

=> Est-ce que je l'installe directement dans le core pour la 2.0.4, ou bien est-ce qu'on joue super-prudent et je la sors d'abord en plugin (et dans le core de la version dev)?

ARNO*

function image_joindre ($im, $masque, $dir="right") {
  $masque = find_in_path($masque);
  $pos = md5(serialize($dir).@filemtime($masque));

  $fonction = array('image_masque', func_get_args());
  $image = image_valeurs_trans($im, "joindre-$masque-$pos", "png", $fonction);
  if (!$image) return("");

  $mask = image_valeurs_trans($masque,"");
  if (!$mask) return("");

  $x_i = $image["largeur"];
  $y_i = $image["hauteur"];
  $x_m = $mask["largeur"];
  $y_m = $mask["hauteur"];

  if ($dir == "right" OR $dir == "left") {
    $x_f = $x_i + $x_m;
    $y_f = max($y_i, $y_m);
  } else {
    $x_f = max($x_i, $x_m);
    $y_f = $y_i + $y_m;
  }
    
  $im = $image["fichier"];
  $dest = $image["fichier_dest"];
  
  $creer = $image["creer"];

  if ($creer) {
      $im_f = imagecreatetruecolor($x_f, $y_f);
      @imagealphablending($im_f, false);
      @imagesavealpha($im_f,true);
      $color_t = ImageColorAllocateAlpha( $im_f, 128, 128, 128 , 127 );
      imagefill ($im_f, 0, 0, $color_t);
      $im1 = $image["fonction_imagecreatefrom"]($im);
      $im2 = $mask["fonction_imagecreatefrom"]($masque);

      if ($dir == "right") {
        imagecopy ( $im_f, $im1, 0, 0, 0, 0, $x_i, $y_i);
        imagecopy ( $im_f, $im2, $x_i, 0, 0, 0, $x_m, $y_m);
      } else if ($dir == "left") {
        imagecopy ( $im_f, $im1, $x_m, 0, 0, 0, $x_i, $y_i);
        imagecopy ( $im_f, $im2, 0, 0, 0, 0, $x_m, $y_m);
      } else if ($dir == "bottom") {
        imagecopy ( $im_f, $im1, 0, 0, 0, 0, $x_i, $y_i);
        imagecopy ( $im_f, $im2, 0, $y_i, 0, 0, $x_m, $y_m);
      } else if ($dir == "top") {
        imagecopy ( $im_f, $im1, 0, $y_m, 0, 0, $x_i, $y_i);
        imagecopy ( $im_f, $im2, 0, 0, 0, 0, $x_m, $y_m);
      }

      image_gd_output($im_f,$image);
  }
  return image_ecrire_tag($image,array('src'=>$dest,'width'=>$x_f,'height'=>$y_f));
}

Je dirais ok pour core 2.04 d un cote ( on va la sortir sous peu)

Et de l autre pas dans la branche dev mais dans le plugin
core/fonctions_graphiques avec toutes les autres

Ben

Martin Arnaud a écrit :

Salut,

Je viens de faire une nouvelle fonction graphique: image_joindre.

Elle permet de joindre deux images dans une seule image, placées l'une à
côté de l'autre. On peut placer la deuxième image à droite, à gauche, en
haut ou en bas de la première image.
[...]

ARNO*

Super!

J'utilise beaucoup les images accolées pour des rollovers ou
d'autres trucs dans ce goût.

A tout hasard, est ce que l'on peut joindre 3 images?
Je suppose qu'il suffit de répéter le filtre une fois de plus.

A bientôt
Grégoire

J'utilise beaucoup les images accolées pour des rollovers ou
d'autres trucs dans ce goût.

Ca peut servir aussi pour les "sprites css"

-- Fil