Nous allons voir comment créer des miniatures d’images, alias thumbnails, ainsi que réduire une image en général, sous Symfony, grâce à un plugin très pratique: sfThumbnailPlugin.
![]()
Dans la console en ssh, installez le plugin via la commande:
php symfony plugin:install sfThumbnailPlugin
Puis nettoyez votre cache:
php symfony cc
Le plugin est normalement activé dans config/ProjectConfiguration.class.php, si ce n’est pas le cas, rajoutez-le à la main:
class ProjectConfiguration extends sfProjectConfiguration
{
public function setup()
{
$this->enablePlugins('sfDoctrinePlugin');
$this->enablePlugins('sfThumbnailPlugin');
...
}
}
Votre plugin est prêt à être utilisé !
La classe sfThumbnail existe désormais dans votre projet, lorsque vous l’initiez elle prend comme paramètre la largeur et la hauteur en pixels du thumbnail voulu:
$thumbnail = new sfThumbnail(150,110);
$thumbnail->loadFile("/home/clem/public/monsite/web/uploads/avatars/avatar3.jpg");
$thumbnail->save('/home/clem/public/monsite/web/uploads/avatars/thumbnails/avatar3.jpg', 'image/jpg');
Imaginons que nous avons une classe Avatar qui a comme attribut « name »: cet attribut contient le nom de l’image.
Nous voulons traiter a chaque enregistrement d’un avatar une miniature pour l’afficher sur le profil de nos membres par exemple, il va être pratique de créer une méthode qui créée ces thumbnails.
// lib/model/doctrine/avatar.class.php class Avatar extends BaseAvatar { public function makeThumbnail() { $pathImgUp = sfConfig::get('app_upload_directory_avatar').$this->getName(); // on récupère des infos sur l'image, notamment son mime_type $info = getimagesize($pathImgUp); $thumbnail = new sfThumbnail(100,70); $thumbnail->loadFile($pathImgUp); $thumbnail->save(sfConfig::get('app_upload_directory_avatar_thumbnail').$this->getName(), image_type_to_mime_type($info[2])); } }
// création de la miniature pour un avatar:
$avatar->makeThumbnail();
Je vous ai montré globalement comment utiliser sfThumbnailPlugin, mais jetez un coup d’oeil dans la documentation du plugin: vous pouvez aussi gérer la qualité de sortie de votre miniature, faire des miniatures de pages d’un pdf, etc…
Et pour aller un peu plus loin, il y a le plugin un peu mieux fait et plus complet : http://www.symfony-project.org/plugins/sfImageTransformPlugin
En effet j’ai eu pas mal d’échos de ce plugin notamment sur twitter. Je le regarde en détail dès que j’ai le temps, merci pour l’info ^^