Accueil
Étude de cas performance

Débusquer un bug silencieux d'Imagick pour vraiment compresser en AVIF

Cas interne, déshumanisé : un paramètre de qualité ignoré sans erreur ni avertissement, sur notre propre pipeline de traitement d'images.

Date
Mars 2026
Portée
pipeline de traitement d'images websource.fr
Format cible
AVIF
Cause racine
paramètre de qualité ignoré par l'API PHP Imagick
Correctif
encodage via l'utilitaire ligne de commande `convert -quality`
Comparaison 3D du poids d'une image avant/après compression AVIF : environ 297 Ko en PNG non optimisé contre environ 34 Ko en AVIF optimisé
Exemple représentatif de la réduction de poids obtenue par une compression AVIF correctement réglée (~89 % dans ce cas).

Contexte & enjeux

L'AVIF permet un gain de poids important par rapport au JPEG ou au WebP à qualité équivalente, mais ce gain dépend entièrement du bon réglage de la compression au moment de la génération. Notre pipeline d'upload et de traitement d'images en PHP s'appuyait sur l'API objet Imagick pour convertir les images vers ce format, y compris en passant explicitement un paramètre de qualité.

Problème rencontré

Les images générées étaient bien au format AVIF, mais leur poids restait anormalement proche du fichier source - symptôme d'une compression qui ne s'appliquait pas réellement. En creusant, le paramètre de qualité transmis via l'API PHP Imagick était silencieusement ignoré par l'encodeur AVIF sur la version d'ImageMagick installée en production, sans erreur ni avertissement renvoyé par PHP. Le pire type de bug : invisible côté code, sans exception à intercepter, détectable uniquement en comparant le poids réel des fichiers générés.

Objectifs

  • Obtenir une compression AVIF effective et mesurable.
  • Ne plus dépendre d'un comportement non documenté de l'extension PHP.
  • Conserver le reste du pipeline inchangé (redimensionnement, nommage versionné compatible avec le cache immuable du CDN).

Solution technique mise en place

Contournement du bug en confiant l'encodage au binaire `convert` d'ImageMagick appelé en ligne de commande depuis PHP (`convert source -quality XX destination.avif`), qui respecte correctement le paramètre de qualité contrairement à l'API objet PHP. Le reste du pipeline - redimensionnement, nommage versionné des fichiers pour rester compatible avec un cache CDN configuré en immuable - reste inchangé.

Qualité et vérification

  • Comparaison systématique du poids de fichier avant/après génération, plutôt que de faire confiance à la seule absence d'erreur.
  • Bascule progressive validée sur un échantillon avant généralisation à l'ensemble du pipeline.

Les résultats

  • Poids moyen d'une image AVIF générée

    Avantquasi identique au fichier source

    Aprèsréduction nette après correctif

  • Détection du bug

    Avantaucune alerte, comportement silencieux

    Aprèscomparaison de poids systématique après génération

  • Méthode de génération

    AvantAPI objet PHP Imagick

    Aprèsappel en ligne de commande `convert -quality`

  • Fiabilité du réglage de qualité

    Avantdépendante d'un comportement non documenté

    Aprèsvérifiée et reproductible

Services & expertises mobilisés
  • Audit de pipeline de traitement et de compression d'images.
  • Diagnostic de bugs silencieux dans une extension PHP tierce (pas d'exception, pas de log).
  • Mise en place d'une génération AVIF fiable et mesurable.
  • Compatibilité avec un cache CDN immuable (nommage versionné des assets).