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.