Vignettes d'images centrées en PHP

Créer des vignettes: Troisième partie

Dans la première partie de ce tutoriel nous avons vu comment créer des vignettes d'images.
Le script a été développé dans la seconde partie pour permettre de réaliser des galeries de vignettes de taille uniforme.

Cependant les images ont encore le défaut d'être rognée sur la partie droite ou sur le bas, or il vaudrait mieux centrer la vignette en rognant des deux cotés à la fois. En outre le script traite uniquement des images au format jpg, et il convient de l'étendre aux autres formats graphiques courants sur le Web: gif et png.

Centrer la vignette

On ajoute deux variables de décalage:

$xoff = 0;
$yoff = 0;

Le déplacement est la différence entre la hauteur de l'image intermédiaire et la hauteur de la vignette finale, ou la largeur.

Lorsque la hauteur doit être rognée, on ajoute au script cette ligne pour calculer l'offset vertical:

$yoff = intval(($nh - $thumbh) / 2); 

et si c'est la largeur:

$xoff = intval(($nw - $thumbw) / 2);

ensuite on incorpore ces déplacements en paramètre de la fonction qui recopie une partie de l'image intermédiaire:

imagecopy($viewimage, $newimage, 0, 0, $xoff, $yoff, $nw, $nh);

Traiter différents formats graphiques

Un tableau contient les principaux formats reconnus par PHP, en associant à l'extension du fichier un code d'image:

$types = array("jpeg"=>IMG_JPG, "jpg"=>IMG_JPG, "gif"=>IMG_GIF, "png"=>IMG_PNG );

function getImageType($name)
{
  global $types;
  
  $way = pathinfo($name);
  $ext = strtolower($way['extension']);
  $t = $types[$ext];
  return $t;  
}

La fonction PHP pathinfo place dans un tableau les composantes d'un chemin de fichier, parmi lesquelles on retrouve l'extension.

En fonction du code de type retourné, on sélectionne la fonction de lecture d'image:

$t = getImageType($oldname); 

switch($t)
{
    case IMG_JPG: $resimage = imagecreatefromjpeg($oldname);
                  break;
    case IMG_GIF: $resimage = imagecreatefromgif($oldname);
                  break;
    case IMG_PNG: $resimage = imagecreatefrompng($oldname);
                  break;                  
}  

Télécharger le script

L'archive contient le script PHP et les images de la galerie ci-dessous.

Galerie de vignettes