ARNO*

Geek dilettante habitant une belle et grande propriété sur la Côte d’améthyste

  • Grosse nouveauté sur mon #plugin #SPIP image_responsive :
    http://zone.spip.org/trac/spip-zone/browser/_plugins_/image_responsive

    Le filtre image_responsive est désormais capable de fabriquer les versions WebP des images, en plus des versions usuelles. Ce qui fait que, si on visite le site avec un navigateur qui comprend WebP, ce sont les versions WebP des images que l’on charge, sinon les versions habituelles (JPEG en général). Et c’est tout automatique (autant pour le reste, le plugin est particulièrement utile si on fait des configurations précises avec une belle gestion des media queries, autant pour le WebP tout se fait tout seul…).

    Pour activer cela, il faut définir une nouvelle constante dans mes_options.php :

    define("_IMAGE_WEBP", true);

    Attention : en cas de mise à jour du plugin, il faut également modifier le .htaccess lié à image_responsive pour prendre en compte les nouveaux appels d’images.

    En gros, par rapport au Jpeg (qualité 80%) généré par SPIP, ça semble me générer des images deux fois plus légères.

    Attention : j’en suis aux premiers tests. Faudrait pas que ça te pète ton site…

    Notez qu’il faut que votre version de PHP soit capable de fabriquer des images en WebP. Ça me semble le cas désormais à peu près partout.

    Notez encore que ce n’est pas anecdotique : d’après CanIUse, le WebP est désormais affiché par 80% des navigateurs.

    • Mise à jour à l’instant (version 7.7.5) qui corrige le fait que, sur certains serveurs, les images WebP sont mal formées à cause d’un bug de PHP (nan mais vraiment, on est en 2019, et PHP continue à être livré avec des bugs grossiers dans les traitements d’images…) :
      https://bugs.php.net/bug.php?id=66590

      Si tu as eu des problèmes avec la version précédente, et que donc ton dossier de cache /local est pourri de fichiers WebP corrompus, voici un petit script pour faire le ménage (à la racine du site donc) :

      <?php

      function getDirContents($dir, &$results = array()){
         $files = scandir($dir);

         foreach($files as $key => $value){
             $path = realpath($dir.DIRECTORY_SEPARATOR.$value);
             if(!is_dir($path)) {
                 $results[] = $path;
             } else if($value != "." && $value != "..") {
                 getDirContents($path, $results);
                 $results[] = $path;
             }
         }

         return $results;
      }


      $liste = getDirContents("local/cache-responsive");

      foreach ($liste as $l) {
              if (preg_match("/webp$/", $l)) {
                      echo "<li>$l";
                      unlink($l);
              }
      }
    • Autre bug je pense : sur les serveurs qui déconnent (ci-dessus), je n’arrive pas, en plus, à fabriquer de WebP avec couche de transparence (c’est-à-dire en travaillant à partir de PNG transparent). Mais ça fonctionne sur un serveur qui n’a pas le bug précédent. (Pfff, vraiment… je veux dire : personne n’a testé la fonctionnalité de base quand ils l’ont implémentée complètement buguée ?).

    • M’enfin sinon, sur un serveur en PHP 7, ça fonctionne très bien, j’ai désormais plusieurs sites qui tournent avec. Avec un serveur PHP 5, ça tourne aussi très bien, à l’exception des PNG semi-transparents qu’on passerait par image_responsive (c’est pas le plus fréquent).