Accueil
Agence web SaaS
É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.

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`

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

Indicateur

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

Détection du bug

Méthode de génération

Fiabilité du réglage de qualité

Avant

quasi identique au fichier source

aucune alerte, comportement silencieux

API objet PHP Imagick

dépendante d'un comportement non documenté

Après

réduction nette après correctif

comparaison de poids systématique après génération

appel en ligne de commande `convert -quality`

vé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).