Pavé Numérique 2025

Conversion d'images au format AVIF

Micro-service en Go exposant une API REST pour convertir des images JPG, PNG ou WebP au format AVIF, conçu pour s'intégrer dans des workflows d'automatisation.

Go bimg libvips API REST

Problématique

Convertir des images au format AVIF en masse dans un pipeline d'automatisation nécessite un outil disponible par API, fiable et rapide — une combinaison que les solutions existantes n'offraient pas.

Le problème :

  • Les outils CLI comme convert (ImageMagick) ou avifenc ne s'intègrent pas facilement dans des workflows API
  • Les services cloud de conversion d'images sont payants et introduisent une dépendance externe
  • Les bibliothèques PHP disponibles pour AVIF sont limitées en performance et en compatibilité
  • Aucun plugin WordPress natif ne proposait à l'époque de conversion AVIF automatique à l'upload

Impact :

  • Impossibilité d'intégrer la conversion AVIF dans mes pipelines d'automatisation de contenu
  • Poids des images non optimisé, impactant les scores Lighthouse et les Core Web Vitals
  • Dépendance à des formats moins efficaces (WebP, JPEG) faute d'outil adapté

Solution technique

J'ai développé un micro-service Go exposant une API REST minimaliste avec un seul endpoint de conversion.

Choix techniques :

Go + bimg :

  • Go offre des performances natives et une empreinte mémoire très faible
  • bimg est un binding Go vers libvips, la bibliothèque de traitement d'images la plus rapide disponible
  • La conversion est nettement plus rapide qu'avec ImageMagick, avec une qualité équivalente

API minimaliste :

  • Un seul endpoint POST /convert acceptant une image en multipart/form-data
  • Réponse directe en binaire AVIF avec les headers Content-Type appropriés
  • Pas d'authentification pour un usage interne uniquement

Intégration dans mes workflows :

  • J'appelle ce service depuis mes scripts d'automatisation avant publication
  • Toutes les images passent par ce service avant d'être stockées ou publiées

Perspective d'évolution :

  • Ce service est conçu pour devenir le backend d'un plugin WordPress qui convertirait automatiquement les images à l'upload, sans intervention manuelle

Le projet

J'ai développé un micro-service minimaliste en Go permettant de convertir à la volée n'importe quelle image (JPG, PNG, WebP) au format AVIF via un simple appel API.

Contexte

Dans mes projets d'automatisation de contenu, je manipule régulièrement de nombreuses images. AVIF est aujourd'hui le format de compression le plus efficace — nettement supérieur à WebP — mais les outils de conversion existants sont soit lourds à intégrer, soit indisponibles sous forme d'API REST prête à l'emploi.

Objectifs

  • Exposer un endpoint simple pour convertir une image en AVIF à partir d'une URL ou d'un upload
  • Minimiser les dépendances et la surface d'attaque
  • Préparer le terrain pour un futur plugin WordPress qui effectuerait la conversion automatiquement à l'upload

Architecture

J'ai opté pour Go pour sa légèreté, sa rapidité d'exécution et son excellente gestion des opérations I/O. La bibliothèque bimg (binding Go vers libvips) assure les conversions avec des performances nettement supérieures à ImageMagick.

POST /convert
  ↓
Lecture de l'image source (URL ou fichier)
  ↓
Conversion via bimg/libvips
  ↓
Réponse: image AVIF binaire

Résultats

50
%
Réduction moyenne du poids des images converties en AVIF par rapport au JPEG source