🔐
← Retour aux guides

Comment convertir des images en URL de données Base64

· Tags: image-to-base64, base64, data-url, image-embedding, web-performance, html, css

Qu'est-ce qu'une URL de données d'image Base64 ?

Une URL de données d'image Base64 intègre le fichier image entier directement dans un document web sous forme de chaîne de texte, éliminant la nécessité d'une requête HTTP distincte pour charger l'image. Au lieu que le navigateur récupère un fichier externe, les données de l'image sont déjà présentes dans le HTML ou le CSS.

Le format ressemble à ceci :

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==

Décomposition du format :

  • data: — le préfixe du schéma d'URI de données
  • image/png — le type MIME de l'image intégrée
  • ;base64 — indique l'encodage Base64
  • ,iVBORw0... — les données d'image réelles encodées en Base64

Pourquoi convertir des images en Base64 ?

L'intégration d'images sous forme de Base64 est utile dans plusieurs scénarios :

Réduire les requêtes HTTP

Chaque fichier image externe nécessite une requête HTTP distincte. Les URL de données Base64 éliminent ces requêtes, ce qui peut améliorer le temps de chargement des pages — en particulier sur les connexions à forte latence ou pour les pages comportant de nombreux petits éléments.

Documents autonomes

Les images Base64 rendent vos fichiers HTML entièrement portables. Un modèle d'e-mail avec des images Base64 fonctionne même lorsque le client de messagerie du destinataire bloque les ressources externes. De même, un document HTML avec des images intégrées peut être partagé comme un fichier unique sans craindre les chemins d'images cassés.

Pages critiques pour les performances

Pour les images hero au-dessus de la ligne de flottaison et les éléments UI critiques, éliminer le aller-retour supplémentaire peut améliorer des métriques comme le Largest Contentful Paint (LCP). Cependant, cela ne profite qu'aux petites images — pour les grandes images, l'intégration est contre-productive.

Fonctionne hors ligne

Lorsqu'une image est intégrée sous forme d'URL de données, elle fonctionne sans accès au réseau. C'est précieux pour les applications web hors ligne et les applications web progressives (PWA).

Comment convertir une image en Base64

Méthode 1 : Utiliser un outil en ligne (le plus simple)

Le moyen le plus rapide de convertir une image en Base64 est d'utiliser un outil en ligne dédié. Téléversez ou glissez-déposez votre image dans notre encodeur Base64 gratuit en ligne, et vous obtiendrez l'URL de données complète prête à coller dans votre code.

Méthode 2 : Utiliser JavaScript dans le navigateur

L'API FileReader offre un moyen simple de convertir des images sélectionnées par l'utilisateur en Base64 :

function imageToBase64(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.onload = () => resolve(reader.result);
    reader.onerror = () => reject(new Error('Failed to read file'));
    reader.readAsDataURL(file);
  });
}

// Usage with a file input
document.getElementById('imageInput').addEventListener('change', async (event) => {
  const file = event.target.files[0];
  if (!file) return;

  const dataUrl = await imageToBase64(file);
  console.log(dataUrl);
  // Output: data:image/jpeg;base64,/9j/4AAQ...
});

Méthode 3 : Utiliser l'API Canvas

Si vous devez redimensionner, recadrer ou compresser une image avant de la convertir en Base64, l'API Canvas est la solution :

function canvasToBase64(canvas, format = 'image/webp', quality = 0.8) {
  return canvas.toDataURL(format, quality);
}

// Example: Resize an image before converting
async function resizeImageToBase64(file, maxWidth = 800) {
  const bitmap = await createImageBitmap(file);
  const canvas = document.createElement('canvas');
  const ratio = Math.min(maxWidth / bitmap.width, 1);
  canvas.width = bitmap.width * ratio;
  canvas.height = bitmap.height * ratio;
  const ctx = canvas.getContext('2d');
  ctx.drawImage(bitmap, 0, 0, canvas.width, canvas.height);
  return canvas.toBase64('image/jpeg', 0.85);
}

Méthode 4 : Utiliser Node.js

Côté serveur, utilisez le module fs avec Buffer pour convertir des fichiers image en Base64 :

const fs = require('fs');
const path = require('path');

function encodeImageToBase64(filePath) {
  const buffer = fs.readFileSync(filePath);
  const base64 = buffer.toString('base64');

  // Detect MIME type from extension
  const ext = path.extname(filePath).toLowerCase();
  const mimeTypes = {
    '.png': 'image/png',
    '.jpg': 'image/jpeg',
    '.jpeg': 'image/jpeg',
    '.gif': 'image/gif',
    '.webp': 'image/webp',
    '.svg': 'image/svg+xml',
    '.ico': 'image/x-icon',
  };
  const mimeType = mimeTypes[ext] || 'image/png';

  return `data:${mimeType};base64,${base64}`;
}

const dataUrl = encodeImageToBase64('logo.png');
console.log(dataUrl);

Méthode 5 : Utiliser la ligne de commande

Sur Linux et macOS, vous pouvez utiliser la commande base64 intégrée :

# Encode to Base64 and wrap as a data URL
echo "data:image/png;base64,$(base64 -w 0 image.png)"

Comment utiliser les images Base64 dans le HTML

Directement dans une balise <img> :

<img
  src="data:image/webp;base64,UklGRpYCAABXRUJQVlA4WAoAAAA..."
  alt="Inline Logo"
  width="200"
  height="100"
/>

Comment utiliser les images Base64 dans le CSS

Comme image d'arrière-plan :

.icon-warning {
  background-image: url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxjaXJjbGUgY3g9IjEyIiBjeT0iMTIiIHI9IjEwIi8+PGxpbmUgeDE9IjEyIiB5MT0iMTYiIHgyPSIxMiIgeTI9IjEyIi8+PGxpbmUgeDE9IjEyIiB5MT0iOCIgeDI9IjEyLjAxIiB5Mj0iOCIvPjwvc3ZnPg==');
  width: 24px;
  height: 24px;
}

Considérations sur les performances et bonnes pratiques

Quand les images Base64 aident

  • Petites icônes et éléments UI de moins de 10 Ko
  • Images critiques au-dessus de la ligne de flottaison qui bloquent le rendu
  • Sprites et icônes SVG utilisés sur une page
  • Modèles d'e-mails où les images externes sont souvent bloquées
  • Applications web hors ligne d'abord et documents autonomes

Quand les images Base64 nuisent

  • Grandes photos ou images haute résolution (100 Ko+) — le surcoût Base64 et le délai d'analyse nuisent aux performances
  • Images qui changent fréquemment — invalider le cache navigateur pour une charge utile HTML volumineuse est inutile
  • Images partagées sur de nombreuses pages — les fichiers externes bénéficient du cache navigateur partagé
  • Images servies par CDN — les CDN optimisent la livraison des fichiers mieux que les données intégrées

La règle empirique des 10 Ko

Une directive largement citée : si une image fait moins de 10 Ko, envisagez de l'intégrer sous forme de Base64. Si elle est plus grande, servez-la comme fichier séparé. Cela équilibre le surcoût des requêtes HTTP contre le surcoût des données encodées en Base64 dans votre HTML.

Cependant, le seuil optimal dépend de votre situation spécifique :

  • Le multiplexage HTTP/2 réduit la pénalité des requêtes multiples, rendant les fichiers externes plus attrayants
  • Sur les connexions lentes, éliminer les requêtes peut être précieux même pour des images plus grandes
  • Pour les ressources du chemin de rendu critique, intégrez même les images plus grandes si cela évite un aller-retour de plus

Considération sur la compression

Si vous convertissez des images JPEG ou PNG en Base64, envisagez d'utiliser WebP à la place. WebP offre une compression supérieure au même niveau de qualité, ce qui donne des chaînes Base64 plus courtes. De nombreux outils en ligne vous permettent de ré-encoder les images avant de les convertir en Base64.

Convertissez vos images en Base64

Prêt à intégrer des images directement dans votre code ? Utilisez notre encodeur et décodeur Base64 gratuit en ligne pour téléverser des images et obtenir des URL de données complètes pour le HTML, le CSS et le JavaScript — aucune installation requise.