Accueil > Documentation > Les plugins développés pour MédiaSPIP > Smush : Optimisation des images

Smush : Optimisation des images

Smush est un plugin pour SPIP 3.0 et supérieur.

Il permet de réduire le poids des images d’un site à leur maximum.

Smush est un plugin pour SPIP dont l’utilisation est comparable à smushit.com, il réduit le poids des images autant qu’il le peut.

Conditions préalables au fonctionnement du plugin

Pour fonctionner, ce plugin a besoin d’utiliser plusieurs binaires (logiciels) sur le serveur.

Il utilise pour cela la fonction exec() de PHP.

Il nécessite que les logiciels suivants soient disponibles :

  • identify [1] ;
  • convert [2] ;
  • jpegtran [3] ;
  • pngnq [4] ;
  • optipng [5] ;
  • gifsicle [6] ;

Dans quel cas une image est optimisée

Par défaut, le plugin agit sur toute image qui passe par un filtre de modification d’image de SPIP (image_reduire, image_recadre...) juste avant le "gravage" de l’image finale.

Il se place dans le pipeline post_image_filtrer et applique automatiquement le filtre image_smush à ces images.

Cette utilisation est désactivable dans la configuration du plugin.

Il peut également être appelé manuellement avec le filtre |image_smush sur une image en particulier dans les squelettes du site, par exemple :

  1. [(#CHEMIN{vers/mon/image.png}|image_smush)]

Vérification des binaires et outil de test

Vérification des binaires

Le plugin nécessitant l’utilisation de logiciels sur le serveur, il vérifie régulièrement leur présence :

  • Lors de l’installation ;
  • Lors de la visite de la page ecrire/?exec=smush_infos ;
  • Avec une tâche cron régulière ;

Si un ou plusieurs logiciels ne sont pas présents, il crée une meta $logiciel_casse dont la valeur est à oui dans la table spip_metas et une meta smush_casse dont la valeur est oui également.

Si la meta smush_casse est présente, les images ne seront pas réduites.

Outil de test

Sur la page ecrire/?exec=smush_infos, en dessous des informations sur la présence des logiciels nécessaires, s’il n’y a pas de problème de ce coté là, un formulaire permet de tester l’optimisation d’une image en fournissant une URL de l’image originale.

Notes de développement

Toute question au sujet de ce plugin est à poser dans le forum en bas de cet article.

Tout rapport de bug, si prouvé, peut se faire dans le gestionnaire de tickets de ce site.

Le code source du plugin est sur la zone de SPIP.

Liens externes

Notes

[1Généralement dans le paquet d’ImageMagick

  1. apt-get install imagemagick

[2Généralement dans le paquet d’ImageMagick

  1. apt-get install imagemagick

[3Généralement dans le paquet libjpeg-progs

  1. apt-get install libjpeg-progs

[4

  1. apt-get install pngnq

[5

  1. apt-get install optipng

[6

  1. apt-get install gifsicle
  • Auteur :
  • Publié le :
  • Mis à jour : 22/11/16
  • Révisé par : 5 anonymes

8 commentaires


  • Le 2 mai 2016 à 13:48, par RealET En réponse à : Smush : optimisation des images

    Bonjour,

    Est-ce qu’utiliser pngquant pourrait être une alternative intéressante pour préserver la transparence alpha des PNG (et ne pas casser les image_masque et image_typo) ?

    Répondre à ce message

  • Le 1er mai 2016 à 15:35, par RealET En réponse à : Smush : optimisation des images

    J’ai rajouté 2 filtres pour pouvoir débrayer temporairement le traitement automatique : http://zone.spip.org/trac/spip-zone/changeset/96913

    Pour pouvoir les utiliser même quand le plugin n’est pas installé, préférer la syntaxe avec appliquer filtre :

    • |appliquer_filtre{image_smush_debrayer,force=true}
    • |appliquer_filtre{image_smush_embrayer,force=true}

    Répondre à ce message

  • Le 19 février 2015 à 22:37, par Pierre En réponse à : Smush : optimisation des images

    Je viens d’être confronté à un petit problème avec des images jpeg.

    Au moment de l’optimisation les variables $im et $dest se retrouvent avec les mêmes valeurs et dans ce cas le résultat est un fichier vide.

    Pour remédier au problème j’ai modifié la variable $dest pour qu’elle soit différente de $im.

    Ne pouvant pas ouvrir de ticket, je poste ici.

    /**
    * On est sur un JPEG
    */
    else if ($format == 'JPEG') {
           $fsize = filesize($im);
           $dest = $tmp.'smush.jpg';
           if ($fsize < 10*1024)
                  exec('jpegtran -copy none -optimize '.$im.' > '.$dest);
           else
                  exec('jpegtran -copy none -progressive '.$im.' > '.$dest);
    }

    Répondre à ce message

  • Le 20 mars 2014 à 10:08, par kent1 En réponse à : Smush : optimisation des images

    Je doute de l’utilité de $source=$im; dans un premier temps, qui à part rajouter une ligne ... ne doit pas servir à grand chose

    D’autre part l’option -clobber n’est disponible qu’à partir de la version 0.7 d’optipng, il faudrait le gérer proprement.

    Par contre n’était ce pas principalement le return $dest; qui bloquait ?

    Répondre à ce message

  • Le 24 février 2014 à 07:25, par captain_torche En réponse à : Smush : optimisation des images

    J’ai fait quelques tests, et il semble que le souci n’arrive qu’avec une seule de mes images de masque.
    Voici le lien de téléchargement des fichiers : http://tests.brillault.fr/files/test_smush.zip

    Le souci n’arrive que sur l’image de gauche : quand SMUSH est activé, les bords de gauche, censés être transparents, deviennent gris.

    Répondre à ce message

  • Le 10 février 2014 à 01:01, par captain_torche En réponse à : Smush : optimisation des images

    Le plugin fonctionne très bien, toutefois il me semble qu’il y ait des problèmes avec les masques d’image gérant la transparence.

    Répondre à ce message

    • Le 18 février 2014 à 22:43, par kent1 En réponse à : Smush : optimisation des images

      Peut on avoir les fichiers qui posent problème pour les tester et essayer d’améliorer le plugin ?

      Répondre à ce message

      • Le 20 mars 2014 à 09:52, par Alexis En réponse à : Smush : optimisation des images

        Bonjour,
        Ce plugin me semble ne pas pouvoir fonctionner pour des images png sans les modifications ci-dessous :

        --- inc/smush_image.php (révision 81513)
        +++ inc/smush_image.php (copie de travail)
        @@ -82,11 +82,11 @@
                       }

                       else if ($format == 'PNG') {
        +                       $source=$im;
                               $nq = substr($source,0,-4).'-nq8.png';
        -                       exec('pngnq -f '.$im.' && optipng -o5 '.$nq.' -out '.$dest,$out);
        +                       exec('pngnq -f '.$source.' && optipng -clobber -o5 '.$nq.' -out '.$dest,$out);
                               if(file_exists($nq))
                                       spip_unlink($nq);
        -                       return $dest;
                       }

                       else if ($format == 'JPEG') {

        Si l’auteur est d’accord je peux envoyer ça sur le svn.

        Répondre à ce message

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici
  • Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document