Comment créer des vignettes d'images pour vos pages Web

Créer des vignettes pour des pages Web peut se faire avec un programme PHP installé sur le serveur, associé à un fichier d'upload, mais pour automatiser la création en chaîne, et maîtriser la qualité d'image, il vaut mieux installer un script localement. Il sera éventuellement plus facile de disposer des fonctions graphiques les plus performantes.

Installer la librairie graphique de PHP

PHP en version 4 ou 5 utilise la librairie gd2 pour le traitement d'image, qui n'est pas activée par défaut (elle peut l'être sur le serveur, utiliser la fonction phpinfo pour le voir).

Pour installer l'extension graphique gd2:

  1. Recopier dans le répertoire /php/ le fichier php.ini-recommanded en php.ini.
  2. Définir le chemin des extensions dans la variable extension_dir, par exemple: extension_dir = "c:/php/ext".
  3. Activer dans les liste des extensions php_gd2.dll (ou php_gd2.so sous Linux) en supprimant le point virgule au début.

Maintenant pour vérifier que gd est bien activée, lancer le programme suivant fourni par le manuel PHP:

<?php
$array=gd_info ();
foreach ($array as $key=>$val) 
{
  if ($val===true)  { $val="Enabled"; }
  if ($val===false) { $val="Disabled"; }
  echo "$key: $val \n";
}
?>   

Il affiche les formats supportés, ou un message d'erreur tant que l'extension n'est pas activé.

Créer une vignette

On peut avec PHP créer des vignettes (des thumbnails), de bonne qualité.

Définir les paramètres

$oldname = "girl.jpg";
$newname = "thumb.girl.jpg";
$newh = 240;

Nous avons choisi une hauteur de 240 pixels pour la vignette. On peut si cela convient mieux, définir plutôt une nouvelle largeur: $neww = xxx;

Interpoler les dimensions

$size = getImageSize($oldname);
$w = $size[0];
$h = $size[1];
$neww = intval($newh * $w / $h);

Si l'on a choisi de définir la largeur plutôt que la hauteur, la formule sera: $newh = intval($neww * $h / $w);

Recréer une image de taille inférieure

$resimage = imagecreatefromjpeg($oldname); 
$newimage = imagecreatetruecolor($neww, $newh);  
imageCopyResampled($newimage, $resimage,0,0,0,0,$neww, $newh, $w, $h);

Les fonctions ont été choisies pour la qualité du résultat. Sous certaines versions de PHP elles ne seront pas disponibles, il faudra trouver dans le manuel une fonction équivalente, mais dont le résultat pourra être de moins bonne qualité.

Sauvegarder la nouvelle image

imageJpeg($newimage, $newname, 85);

De même pour le type d'image, choisir la fonction qui convient au format du fichier. Dans le cas d'un fichier JPeg, le troisième paramètre est la qualité de restitution (en proportion inverse du niveau de compression), le maximum étant de 100 avec une compression nulle.

Obtenir une meilleure qualité d'image

Dans notre exemple, avec une image de style bande dessinée, il se trouve que la vignette est aussi nette que le dessin original. Avec d'autres types d'images, des photos par exemple, si l'on n'est pas satisfait du résultat, on peut utiliser le plugin G'MIC.

Pour utiliser ce logiciel:
1) Télécharger et installer le logiciel libre GIMP.
2) Télécharger et installer le plugin G'MIC.
3) Dans le menu filtre, sélectionner G'MIC et choisir Enhancement puis essayer les options.

Noter que le plugin G'MIC est plus particulièrement efficace pour améliorer la qualité d'images à restorer, de photos floues, pixelisées, ou pointillées.

Comparaison des résultats

La première vignette est réalisée par G'MIC, la seconde par PHP avec la commande de rééchantillonage imageCopyResampled.

Code sources

Deuxième partie: Créer des vignettes pour une hauteur et une largeur données.

Obtenir les logiciels