PrestaShop augmente le poids de vos images : causes et solutions
Vos images sont plus lourdes après import dans PrestaShop ? Découvrez pourquoi et comment optimiser la compression avec GD, WebP et le lazy loading.
En bref : PrestaShop augmente le poids des images car la librairie GD réencode chaque fichier avec une compression basique. Pour corriger : vérifiez GD, réduisez la qualité JPEG à 80, pré-compressez vos images avec TinyPNG et activez le WebP sur PrestaShop 8.x.
Pourquoi PrestaShop alourdit vos images après import
Un problème récurrent chez les marchands PrestaShop : vous uploadez une image de 150 Ko et vous la retrouvez à 300 Ko (voire plus) une fois traitée par le back-office. Ce comportement contre-intuitif a des causes techniques précises, et surtout des solutions concrètes.
Comprendre le mécanisme de régénération d'images
Quand vous importez une image produit, PrestaShop ne se contente pas de la stocker telle quelle. Le CMS :
- **Décode l'image source** via la librairie graphique PHP (GD ou ImageMagick)
- **Génère toutes les déclinaisons** définies dans **Conception > Images** (miniature, panier, fiche produit, etc.)
- **Réencode chaque déclinaison** au format JPEG avec un niveau de qualité configuré
- **GD Support** : enabled
- **JPEG Support** : enabled
- **PNG Support** : enabled
- **WebP Support** : enabled (PHP 7.1+)
- **TinyPNG / TinyJPG** : compression lossy intelligente, réduction de 50-80% sans perte visible. API disponible pour le traitement par lots.
- **Squoosh** (par Google) : outil en ligne gratuit avec prévisualisation avant/après.
- **ImageOptim** (macOS) : traitement local par lots.
- [ ] Librairie GD installée et activée (avec support JPEG + WebP)
- [ ] Aucun override parasite dans `override/classes/ImageManager.php`
- [ ] Module filigrane désinstallé si non utilisé
- [ ] Images source ≥ taille du plus grand preset
- [ ] Qualité JPEG réglée entre 75 et 85
- [ ] Pré-compression systématique avant upload (TinyPNG, Squoosh)
- [ ] Format WebP activé (PrestaShop 8.x)
- [ ] Lazy loading implémenté
- [ ] Miniatures régénérées après chaque changement de configuration
C'est à l'étape 3 que le problème survient. Si votre image source était déjà optimisée avec un algorithme de compression avancé (comme celui de TinyPNG ou Squoosh), le réencodage par GD produit souvent un fichier plus lourd car la librairie GD utilise une compression JPEG basique, moins efficace que les outils spécialisés.
Les causes principales
1. La librairie GD mal configurée ou absente
GD est la librairie de traitement d'images par défaut de PHP. Si elle est absente ou mal configurée, PrestaShop peut tomber sur un fallback qui produit des images non compressées.
Pour vérifier sa présence, créez un fichier temporaire info.php à la racine de votre site :
<?php
phpinfo(INFO_MODULES);
Accédez-y via https://votre-site.com/info.php et recherchez la section gd. Vous devez voir :
Sécurité : supprimez immédiatement ce fichier après vérification. Un
phpinfo()exposé publiquement révèle des informations sensibles sur votre serveur.
2. Dimensions des presets vs dimensions source
Si votre image source fait 800×800 px mais que vous avez un preset configuré à 1200×1200 px, PrestaShop va upscaler l'image. Le résultat : une image plus grande en pixels, plus lourde en octets, et plus floue visuellement. C'est le pire scénario possible.
Vérifiez vos presets dans Conception > Images (PS 1.7) ou Design > Images (PS 8.x) :
Règle d'or : votre image source doit toujours être au moins aussi grande que votre plus grand preset.
3. Le niveau de qualité JPEG trop élevé
Par défaut, PrestaShop encode les images en JPEG qualité 90. C'est élevé. Dans la classe ImageManager, le paramètre de qualité impacte directement le poids :
Sur PrestaShop 8.x, vous pouvez ajuster la qualité dans Design > Images > Qualité des images ou via un override de la classe ImageManager :
// override/classes/ImageManager.php
class ImageManager extends ImageManagerCore
{
public static function quality(): int
{
// Réduire de 90 à 80 pour un bon compromis poids/qualité
return 80;
}
}
Sur PS 1.7, vérifiez qu'il n'existe pas un override hérité d'un ancien module de filigrane (watermark) qui forcerait une qualité à 100 ou désactiverait la compression.
4. Le module Filigrane (Watermark)
L'ancien module watermark (filigrane) de PrestaShop est connu pour interférer avec la compression d'images. Lors du traitement, il décode l'image, applique le filigrane, puis réencode sans optimisation. Si ce module est installé (même désactivé), vérifiez qu'il ne laisse pas de override dans override/classes/ImageManager.php.
Solutions pour optimiser vos images
Pré-compression avant upload
La meilleure approche est d'optimiser vos images avant de les importer dans PrestaShop. Outils recommandés :
Passer au format WebP
Depuis PrestaShop 8.0, le support natif du format WebP est intégré. WebP offre une compression 25 à 35% meilleure que JPEG à qualité visuelle équivalente.
Activation dans Design > Images > Format de génération des images : cochez WebP en plus de JPEG pour maintenir la compatibilité avec les anciens navigateurs.
Sur PrestaShop 1.7, le support WebP nécessite un module tiers ou un override personnalisé.
Implémenter le lazy loading
Pour les performances perçues, implémentez le chargement différé des images. Depuis PrestaShop 8.x, l'attribut natif loading="lazy" est supporté. Pour une solution plus robuste avec support du responsive :
<!-- Dans vos templates Smarty -->
<img
data-src="{$image.url}"
data-srcset="{$image.small} 250w, {$image.medium} 450w, {$image.large} 800w"
sizes="(max-width: 768px) 100vw, 50vw"
class="lazyload"
alt="{$product.name|escape:'html':'UTF-8'}"
width="{$image.width}"
height="{$image.height}"
/>
Combinée avec la librairie lazysizes, cette approche permet de servir des images adaptées à chaque viewport et de ne charger que les images visibles.
Régénérer les miniatures après optimisation
Après avoir modifié vos paramètres de qualité ou vos presets, régénérez toutes les miniatures via Design > Images > Régénérer les miniatures. Attention : sur un catalogue volumineux (5 000+ produits), lancez cette opération en CLI pour éviter les timeouts :
php bin/console prestashop:image:regenerate --all
Checklist d'optimisation images PrestaShop
Questions fréquentes
Tout ce que vous devez savoir sur ce sujet.
Un projet PrestaShop ?
Discutons-en directement.
193 projets livrés
Lire sur le blog

Alexandre Carette
Expert PrestaShop & Architecture E-commerce
Développeur PrestaShop depuis 2014, 193 projets livrés. Je conçois des architectures headless Nuxt + PrestaShop et des outils d'automatisation IA pour les e-commerçants.