Aller au contenu
Disponible 8–12 jours/mois pour vos projets web et logiciels métier Discutons sur WhatsApp →
Logo Coding974 Coding974 Etienne Vaytilingom
En Passer en anglais

ImageMagick & AVIF dans PrestaShop : ma contribution open source au core (PR #40625)

ImageMagick & AVIF dans PrestaShop : ma contribution open source au core (PR #40625)

Il y a 3 mois, j’ai développé un module sur mesure pour un client. L’objectif était simple : obtenir des images plus nettes et plus légères sur sa boutique PrestaShop. Le module tourne en production sans problème depuis, alors j’ai décidé de l’adapter pour le core de PrestaShop.

Résultat : une Pull Request proposée au core (PR #40625), taguée pour le milestone 9.2 et toujours en cours de revue. Comme rien ne garantit ni la date ni l’inclusion finale, j’ai aussi packagé la solution en module gratuit pour ceux qui veulent en profiter dès aujourd’hui.

Le problème initial

PrestaShop utilise par défaut la librairie GD pour le traitement des images. Bien que fonctionnelle, GD présente plusieurs limitations :

  • Qualité de redimensionnement moyenne : l’algorithme par défaut produit des images parfois floues
  • Pas de support AVIF natif : le format le plus performant du web moderne n’était pas disponible
  • Consommation mémoire élevée : problématique pour les boutiques avec beaucoup de produits

De plus, une demande de la communauté pour le support d’ImageMagick existait depuis 2020, sans réponse officielle.

La solution technique

Ma Pull Request apporte 4 améliorations majeures, sans breaking change :

1. Support natif d’ImageMagick

ImageMagick est la référence en matière de traitement d’images. Ma contribution l’intègre nativement à PrestaShop avec :

// Détection automatique de la disponibilité
if (extension_loaded('imagick')) {
    // Utilisation d'ImageMagick
} else {
    // Fallback sur GD
}

Aucune configuration nécessaire : si ImageMagick est disponible sur le serveur, il est utilisé automatiquement.

2. Support AVIF réparé

Le format AVIF offre une compression supérieure au WebP tout en maintenant une excellente qualité. Le support existait partiellement mais était cassé. Ma contribution :

  • Corrige la détection du support AVIF
  • Ajoute la génération AVIF via ImageMagick
  • Maintient la compatibilité avec les navigateurs plus anciens

3. Filtre Lanczos pour le redimensionnement

Le filtre Lanczos est reconnu comme l’un des meilleurs algorithmes de redimensionnement d’images :

$imagick->resizeImage(
    $width,
    $height,
    \Imagick::FILTER_LANCZOS,
    1
);

Comparé à l’algorithme GD par défaut, les images redimensionnées avec Lanczos sont :

  • Plus nettes
  • Sans artefacts de compression
  • Visuellement plus proches de l’original

4. Fallback automatique intelligent

Le système détecte automatiquement les capacités du serveur :

  1. ImageMagick disponible → utilisé avec Lanczos
  2. Seulement GD disponible → fallback transparent
  3. Ni l’un ni l’autre → erreur claire pour l’administrateur
public static function getImageProcessor(): ImageProcessorInterface
{
    if (self::isImagickAvailable()) {
        return new ImagickProcessor();
    }

    return new GdProcessor();
}

Impact concret pour les boutiques

Avant (GD uniquement)

  • Images parfois floues après redimensionnement
  • Fichiers WebP ou JPEG uniquement
  • Qualité visuelle variable selon les produits

Après (ImageMagick + AVIF)

  • Images plus nettes grâce au filtre Lanczos
  • Fichiers 30-50% plus légers avec AVIF
  • Chargement plus rapide = meilleur SEO
  • Expérience client améliorée

Pourquoi contribuer à l’open source ?

Cette contribution illustre parfaitement le cercle vertueux de l’open source :

  1. Un besoin client réel : développement d’un module sur mesure
  2. Validation en production : 3 mois de fonctionnement sans problème
  3. Partage avec la communauté : adaptation pour le core
  4. Amélioration collective : toutes les boutiques en bénéficient

Le tout sans module payant et sans réglages complexes.

Détails de la Pull Request

Comment en profiter ?

Dès maintenant (module gratuit)

La PR pour le core étant toujours en attente de validation, plutôt que de vous faire attendre la 9.2, je vous offre le module dès aujourd’hui — gratuit et open-source. Il tourne sur PrestaShop 8.1+ et 9.x.

👉 Coding974 AVIF & Imagick Optimizer — page du module (installation, prérequis et téléchargement)

Le code est libre (licence MIT) et hébergé sur GitHub. Vous installez, vous régénérez vos miniatures, c’est tout.

Si la PR est mergée dans le core

Le jour où la Pull Request est intégrée, la fonctionnalité deviendra native dans la version de PrestaShop qui l’embarque. Il suffira alors que votre hébergeur propose ImageMagick (c’est le cas de la plupart des hébergeurs modernes). En attendant, le module fait exactement le même travail.

Pour vérifier si ImageMagick est disponible sur votre serveur :

<?php
echo extension_loaded('imagick') ? 'ImageMagick disponible' : 'GD uniquement';

Conclusion

Contribuer à l’open source, c’est transformer un développement client en amélioration pour toute la communauté. Que la PR soit un jour mergée ou non, la solution existe déjà sous forme de module gratuit — et peut avoir un impact concret sur des milliers de boutiques.


Vous souhaitez optimiser les performances de votre boutique PrestaShop ? Contactez-moi pour un audit gratuit.

Besoin d'aide pour votre projet web ?

Développeur freelance à La Réunion