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 :
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 :
[(#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.
Débrayer le plugin ponctuellement
-
|image_smush_debrayer
pour ne pas appliquer smush -
|image_smush_embrayer
pour appliquer smush sur la suite des traitements
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}
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
- http://www.smushit.com - un outil en ligne d’optimisation d’images;
- http://kraken.io - un outil en ligne d’optimisation d’images;
# On 2 May 2016 at 13:48, by RealET
Replying to: 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) ?
Reply to this message
# On 1 May 2016 at 15:35, by RealET
Replying to: 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}
Reply to this message
# On 19 February 2015 at 22:37, by Pierre
Replying to: 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);
}
Reply to this message
# On 20 March 2014 at 10:08, by kent1
Replying to: 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 choseD’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?Reply to this message
# On 24 February 2014 at 07:25, by captain_torche
Replying to: 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.
Reply to this message
# On 10 February 2014 at 01:01, by captain_torche
Replying to: 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.
Reply to this message
# On 18 February 2014 at 22:43, by kent1
Replying to: Smush : optimisation des images
Peut on avoir les fichiers qui posent problème pour les tester et essayer d’améliorer le plugin?
Reply to this message
# On 20 March 2014 at 09:52, by Alexis
Replying to: 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.
Reply to this message