Comment Convertir une Image en Base64 (En Ligne et par Programmation)

07 Jan 2026 1,933 words

Comment Convertir une Image en Base64

Convertir des images en Base64 est utile pour intégrer des images directement dans du HTML, du CSS ou des charges utiles JSON. Cela évite des requêtes HTTP supplémentaires et rend votre contenu autonome. Au lieu de lier un fichier image externe avec un attribut src de balise <img> pointant vers une URL, vous pouvez intégrer les données image directement dans le HTML en utilisant une URI de données. Cela élimine le besoin pour le navigateur de faire une requête réseau séparée pour l'image, réduisant la latence et garantissant que l'image est disponible même lorsque les ressources externes sont bloquées.

Le concept d'encodage Base64 pour les images est fondé sur la nécessité de transmettre des données binaires sur des supports conçus pour le texte. Les emails, JSON, XML et de nombreux protocoles web ont été conçus principalement pour le contenu textuel. Lorsque vous devez inclure des données binaires comme des images dans ces contextes, l'encodage Base64 convertit les données image binaires en une représentation ASCII sécurisée qui peut être incluse en ligne sans traitement spécial. Le compromis est une augmentation de taille d'environ 33 % par rapport au fichier binaire original, mais pour les petites images comme les icônes, logos et miniatures, ce surcoût est souvent acceptable.

Comprendre les URI de Données

Une URI de données est un schéma d'URL qui vous permet d'inclure des données en ligne dans une page web. Le format pour une URI de données d'image est :

data:image/png;base64,iVBORw0KGgoAAAANSUhEUg...

Les composants d'une URI de données se décomposent comme suit. Le préfixe data: indique au navigateur que le contenu est en ligne plutôt que récupéré depuis une URL externe. La partie image/png est le type MIME qui spécifie le format de l'image. Le mot-clé base64 indique le schéma d'encodage utilisé. Tout ce qui suit la virgule est la donnée image encodée en Base64.

Les navigateurs prennent en charge les URI de données dans les balises <img>, les propriétés CSS background-image, et même dans les balises <link rel="icon"> pour les favicons. Le navigateur décode les données Base64 en binaire et affiche l'image exactement comme si elle avait été récupérée depuis une URL.

Comparaison des Formats d'Image pour Base64

Choisir le bon format d'image avant de convertir en Base64 affecte à la fois la taille du fichier et la qualité de l'URI de données résultante.

Format Compression Idéal Pour Augmentation de Taille Base64
PNG Sans perte Graphiques, icônes, captures d'écran ~33%
JPEG Avec perte Photographies, images complexes ~33%
GIF Sans perte Animations simples ~33%
WebP Les deux Web moderne (fichiers les plus petits) ~33%
SVG Textuel Graphiques vectoriels Minime

L'augmentation de taille Base64 est cohérente entre les formats car Base64 encode chaque 3 octets d'entrée en 4 octets de sortie, avec un remplissage ajouté si nécessaire. Cela signifie qu'un fichier PNG de 10 Ko devient environ 13,6 Ko après encodage Base64, quel que soit le format d'image.

Cependant, le choix du format d'image affecte considérablement la taille de départ. WebP produit généralement des fichiers 25 à 35 % plus petits que le PNG pour une même qualité visuelle. Si vous convertissez un PNG en WebP avant l'encodage Base64, l'URI de données finale sera significativement plus petite que l'URI de données basée sur PNG. Pour cette raison, il vaut toujours la peine d'optimiser le format d'image avant de convertir en Base64.

Le SVG est un cas particulier car il est déjà basé sur du texte (XML). Au lieu d'encoder en Base64 une version PNG de votre SVG, vous pouvez inclure le balisage SVG directement dans votre HTML. C'est plus efficace, plus accessible et plus flexible que de convertir en Base64. Encodez uniquement le SVG en Base64 si vous devez l'intégrer dans un contexte qui nécessite un format binaire, comme une propriété CSS background-image où vous voulez éviter des requêtes HTTP séparées.

Quand Utiliser des Images Base64

L'intégration d'images en tant qu'URI de données Base64 n'est pas toujours le bon choix. Comprendre quand c'est bénéfique vous aide à prendre des décisions de performance éclairées.

Cas d'Utilisation Recommandés

  • Petites icônes et éléments d'interface. Les icônes de quelques centaines d'octets à quelques kilo-octets sont d'excellents candidats pour l'intégration Base64. Le surcoût d'une requête HTTP séparée pour chaque icône dépasse largement l'augmentation de taille Base64. Un site web typique peut avoir 20 à 50 petites icônes ; les intégrer en URI de données élimine des dizaines de requêtes HTTP.

  • Remplacement des sprites CSS. Au lieu d'utiliser des sprites CSS (combiner de nombreuses petites images en une seule grande image et utiliser background-position pour afficher la bonne partie), vous pouvez intégrer chaque icône en URI de données Base64. Cela simplifie votre CSS et élimine le besoin de maintenir un atlas de sprites.

  • Signatures email. Les clients de messagerie bloquent souvent les images externes par défaut. L'intégration d'images en URI de données garantit que votre logo ou votre image de signature est toujours visible, même lorsque le client de messagerie du destinataire bloque le contenu externe.

  • Documents autonomes. Si vous créez un document HTML mono-fichier pour distribution, comme un rapport, une présentation ou un prototype, l'intégration de toutes les images en URI de données rend le fichier complètement autonome. Le destinataire n'a pas besoin de télécharger de ressources externes.

Quand Éviter les Images Base64

  • Grandes photographies. Un JPEG de 500 Ko devient 700 Ko après encodage Base64. Le surcoût de 200 Ko est significatif, et le navigateur doit décoder la chaîne Base64 avant de l'afficher, ajoutant de la latence. Pour les grandes images, utilisez des balises <img> standard avec mise en cache HTTP.

  • Images utilisées plusieurs fois sur la même page. Si la même image apparaît plusieurs fois (par exemple, un logo dans l'en-tête et le pied de page), une URI de données est intégrée à chaque fois, dupliquant les octets. Un fichier image externe mis en cache est récupéré une fois et réutilisé.

  • Images partagées sur plusieurs pages. Les URI de données sont propres à chaque document. Si la même image apparaît sur chaque page de votre site, elle est réintégrée dans le HTML de chaque page, gaspillant de la bande passante. Utilisez plutôt des URLs externes avec des en-têtes de cache.

Méthode en Ligne Étape par Étape

Convertir une image en Base64 en ligne est la méthode la plus rapide lorsque vous avez besoin d'une conversion ponctuelle.

  1. Préparez votre fichier image. Pour de meilleurs résultats, optimisez d'abord l'image. Redimensionnez-la aux dimensions que vous utiliserez, compressez-la et choisissez le format approprié (PNG pour les graphiques, JPEG pour les photos, WebP pour les navigateurs modernes).

  2. Ouvrez un outil d'encodage Base64. Utilisez l'outil Encodeur Décodeur Base64. Il accepte les téléchargements d'images via un sélecteur de fichiers ou par glisser-déposer.

  3. Téléchargez ou faites glisser votre fichier image sur l'outil. L'outil lit le fichier et le convertit en Base64 instantanément.

  4. Copiez l'URI de données résultante. La sortie inclut le préfixe data:image/[format];base64, pour que vous puissiez la coller directement dans votre HTML ou CSS.

  5. Utilisez l'URI de données dans votre code :

    • HTML : <img src="data:image/png;base64,..." alt="description">
    • CSS : background-image: url('data:image/png;base64,...');

JavaScript (Navigateur)

Convertir des images en Base64 dans le navigateur est utile pour le traitement d'images côté client, par exemple avant de les télécharger sur un serveur ou lors de la construction d'une application web qui manipule des données image localement.

function toBase64(file) {
  return new Promise((resolve, reject) => {
    const reader = new FileReader();
    reader.readAsDataURL(file);
    reader.onload = () => resolve(reader.result);
    reader.onerror = reject;
  });
}

// Usage
document.getElementById('file-input').addEventListener('change', async (e) => {
  const file = e.target.files[0];
  const base64 = await toBase64(file);
  console.log(base64);
});

La méthode FileReader.readAsDataURL() lit le fichier entier en mémoire et produit une URI de données. Cette méthode est asynchrone, donc elle ne bloque pas le thread principal. Pour les très gros fichiers (plus de 100 Mo), envisagez de diffuser le fichier par morceaux pour éviter les problèmes de mémoire.

Node.js

Dans un environnement serveur Node.js, vous pouvez convertir des images en Base64 avant de les stocker dans une base de données, de les envoyer dans une réponse API ou de les intégrer dans un document HTML généré.

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

const imagePath = path.join(__dirname, 'image.png');
const image = fs.readFileSync(imagePath);
const base64 = image.toString('base64');
const dataUri = `data:image/png;base64,${base64}`;

Pour les gros fichiers, utilisez la méthode asynchrone fs.readFile() pour éviter de bloquer la boucle d'événements. L'appel image.toString('base64') convertit le Buffer en une chaîne Base64. Vous pouvez déterminer le type MIME correct en examinant l'extension du fichier ou en utilisant une bibliothèque comme mime-types.

Python

Le module base64 de Python rend la conversion d'image en Base64 simple. Cette approche est couramment utilisée dans les frameworks web comme Django et Flask pour générer des URI de données dans les templates.

import base64

with open('image.png', 'rb') as f:
    base64_str = base64.b64encode(f.read()).decode('utf-8')
    data_uri = f'data:image/png;base64,{base64_str}'

Le mode 'rb' ouvre le fichier en mode binaire, ce qui est nécessaire pour lire les données image. La fonction base64.b64encode() renvoie des octets, donc nous appelons .decode('utf-8') pour la convertir en chaîne pour l'inclusion dans l'URI de données.

Python avec Détection de Type MIME

import base64
import mimetypes

def image_to_data_uri(image_path):
    mime_type, _ = mimetypes.guess_type(image_path)
    if not mime_type:
        raise ValueError(f'Could not determine MIME type for {image_path}')
    with open(image_path, 'rb') as f:
        base64_str = base64.b64encode(f.read()).decode('utf-8')
    return f'data:{mime_type};base64,{base64_str}'

Cette version étendue détecte automatiquement le type MIME en fonction de l'extension du fichier, ce qui la rend adaptée à la gestion de plusieurs formats d'image sans spécification manuelle du type.

PHP

PHP est couramment utilisé dans les applications web côté serveur et fournit des fonctions d'encodage Base64 intégrées.

$image = file_get_contents('image.png');
$base64 = base64_encode($image);
$dataUri = 'data:image/png;base64,' . $base64;

Pour les gros fichiers, la limite de mémoire de PHP peut être dépassée par file_get_contents(). Utilisez fopen() avec un flux pour les fichiers de plus de quelques mégaoctets. Vous pouvez également utiliser l'extension finfo pour détecter automatiquement le type MIME :

$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimeType = finfo_file($finfo, 'image.png');
finfo_close($finfo);

$image = file_get_contents('image.png');
$base64 = base64_encode($image);
$dataUri = 'data:' . $mimeType . ';base64,' . $base64;

Considérations de Performance

Lors de l'utilisation d'images Base64, tenez compte des compromis de performance suivants.

Augmentation de la taille HTML. Une image encodée en Base64 augmente la taille du fichier HTML, ce qui retarde le rendu initial de la page. Pour les petites images, cela est compensé par l'élimination des requêtes HTTP. Pour les grandes images, le délai est inacceptable.

Surcoût CPU. Le navigateur doit décoder le Base64 en binaire avant de l'afficher. Ce décodage prend du temps CPU, bien que les navigateurs modernes décodent le Base64 à des centaines de mégaoctets par seconde, rendant ce surcoût négligeable pour les petites images.

Absence de granularité du cache. Les URI de données sont mises en cache dans le cadre du fichier HTML ou CSS. Si vous mettez à jour une seule image, le cache du fichier conteneur entier est invalidé. Avec des images externes, seul le fichier image modifié doit être récupéré.

Compression Gzip. Les données encodées en Base64 se compressent mal avec gzip par rapport au binaire brut, car Base64 utilise un alphabet limité qui crée plus d'entropie dans le flux d'octets. Cependant, la taille compressée gzip d'une page avec des images Base64 est souvent encore inférieure au surcoût réseau des requêtes HTTP séparées pour chaque image.


About this article

Apprenez plusieurs façons de convertir des images au format Base64 à l'aide d'outils en ligne et de code en JavaScript, Python, PHP et plus.


Related Articles


Related Tools

Help2Code Logo
Menu