Généralités

Utilisez si possible les nouveaux formats d’imagerie comme le JPG2000 ou le WEBP qui proposent une compression sans perte plus élevée diminuant ainsi drastiquement le poids et le temps de chargement des images !

Pour ma part je privilégie depuis récemment le format WEBP pour diminuer le poids de mes sites.

Il existe de nombreux sites en ligne pour convertir nos images, comme convertio.co.
Cependant ces outils sont bridés (nombre de conversions autorisées par jour).
De plus c’est peu pratique surtout si on doit traiter plusieurs dizaines de fichiers.

En effet, nous devons uploader, cliquer sur des boutons, télécharger le ou les fichier(s) converti(s) pour ensuite les envoyer sur le serveur.

C’est lourd et chiant !

Le format WEBP

Le format WEBP a été développé et rendu public par Google. Ce format permet de réduire les images BMP, PNG ou encore JPEG de 30% à 80% !

Dans l’exemple ci-dessus on voit bien que la même image pèse 50% en moins !

Ce dernier supporte les images animées (ex: gif) et la transparence (ex: png)

De plus il est supporté par tous les navigateurs web récents.
La liste des navigateurs compatibles est disponible sur caniuse.

Afin que vous puissiez convertir facilement tous vos fichiers JPG, PNG et BMP au format WEBP en 1 clic voici un petit bout de code PHP:

Le bout de code suivant permet de convertir toutes les image éligibles du répertoire au format webp.

<?php
    // function for convert files (ex: landscape.png -> landscape.png.webp)
    function convertToWebp($path){
        if(!file_exists($path.".webp")){ // we check if file already exist (for don't create erase and recreate)
            $i = pathinfo($path);
            switch(strtolower($i["extension"])) {
            	case "jpg":
            case "jpeg":
                	$im = imagecreatefromjpeg($path);
                	break;
            	case "png":
                	$im = imagecreatefrompng($path);
                	break;
            	case "bmp":
                	$im = imagecreatefrombmp($path);
                	break;
            }
            if(isset($im)){
                imagepalettetotruecolor($im);
                imagealphablending($im, true);
                imagesavealpha($im, true);
                imagewebp($im, $path.'.webp');
                imagedestroy($im);
                echo "<p>$path converted.<p>";
            }
        }else{ // if image already exist
            echo "<p>$path.webp already exist.<p>";
        }
    }
    $files = scandir("./"); // folder to scan
    foreach($files as $key => $value){ // check element per element
        if(is_file($value)==true){ // we check if it's a file and not a folder
            convertToWebp($value);
        }
    }
?>

Vous devez modifier le chemin cible en paramètre de la fonction native « scandir » si vous souhaitez appliquer l’action à un autre répertoire.

 

Laisser un commentaire