Générer des thumbs lors de l’affichage d’une image

Nous allons voir ici comment générer facilement des thumbs lors de l’affichage d’une image sur le site, plutôt que lors de l’upload de cette image.
L’intérêt: une fois que le site est lancé, qu’il y a des images déjà uploadées, il est beaucoup plus facile de changer dans le code la taille d’affichage et de regénérer automatiquement les images, plutôt que de devoir tout réuploader une seconde fois, voir +.

Afin d’optimiser l’affichage des pages, il est recommandé de généré plusieurs thumb (vignettes) pour une même image. Il y a l’image d’origine, puis une version en 200×200, une en 150×100 et une 50×50, suivant leur position sur le site.
Une première solution est de générer ces thumbs lors de l’upload, c’est très efficace, le travail ce fait une fois lors de la sauvegarde et est opérationnel directement. Mais on a tous eu un projet où finalement il faut créer un nouveau thumb ou changer le 150×100 en 100×100 et là c’est le drame: il faut re-uploader toutes les images une par une (enfin si le site est déjà en prod, le mieux c’est de s’en rendre compte du problème avant).

Bref, la deuxième solution est d’uploader une image source, et lors de l’affichage demander la taille souhaitée. Là on vérifie si le thumb existe, si oui on l’affiche, sinon , on le crée et on l’affiche.
Voila ce que je vous propose aujourd’hui, un petit helper tout fait qui s’occupe de cette deuxième solution.
Il est basé sur le plugin sfImageTransformPlugin qui est excellent et dont vous avez toute la doc ici: http://www.symfony-project.org/plugins/sfImageTransformPlugin.

Pour installer le helper rien de plus simple, vous créez le répertoire lib/helper, et vous placez le fichier dedans.
lors de l’appel il faut penser à le loader avec la fonction suivante dans une action sfProjectConfiguration::getActive()->loadHelpers(‘Thumb’);
ou

<?php use_helper('Thumb');?>

dans la vue.

il y a deux fonctions:

une pour générer le thumb:
doThumb($image_name, $folder, $options = array(), $resize = ‘scale’, $default = ‘default.jpg’)
@param $image_name : le nom de l’image donc généralement le $object->getImage(), pas de répertoire
@param $folder : le nom du répertoire dans uploads où est stocké l’image : uploads/object/source => $folder = object
@param $options : la taille de l’image: width et height
@param $resize : l’opération sur le thumb: « scale » pour garder les proportions, « center » pour tronquer l’image
@param $default : l’image par défaut si image_name n’existe pas
le thumb est créé dans uploads/object/thumb/
le réslutat retourné est le lien vers l’image : /uploads/object/thumb/mon-image.jpg

une autre fonction :
showThumb($image_name, $folder, $options = array(), $resize = ‘scale’, $default = ‘default.jpg’)
elle appelle la précédente avec les même paramètres.
elle retourne l’image tag directement. donc un seul paramètre change:
@param $options : les parametres à passer à l’image: width, height, alt, title, class, id…

Vous pouvez télécharger le helper ici: thumbhelper

Merci de me contacter en cas de soucis.

Partagez cet article