Décodeur d'image Base64, gratuit

Collez une chaîne Base64 pour prévisualiser et télécharger l'image.

Vos données ne quittent pas votre appareil
L'image décodée apparaîtra ici

Comment utiliser

  1. Collez une chaîne d'image encodée en Base64 dans la zone de saisie. Elle peut inclure le préfixe data:image/… ou contenir uniquement les données Base64 brutes.
  2. Cliquez sur Décoder l'image pour la prévisualiser.
  3. Cliquez sur Télécharger l'image pour l'enregistrer en fichier PNG.

Questions fréquentes

Quels formats Base64 sont pris en charge ?

Vous pouvez coller une chaîne Base64 brute (l'outil détecte le format automatiquement) ou un URI de données complet comme data:image/png;base64,iVBOR…. Types d'image pris en charge : PNG, JPEG, WebP, GIF, BMP et SVG.

Y a-t-il une limite de taille ?

Il n'y a pas de limite stricte, mais les chaînes Base64 très volumineuses (plus de 5–10 Mo) peuvent être longues à traiter selon votre appareil.

Comment encoder une image en Base64 ?

Utilisez notre outil Convertisseur image → Base64, gratuit · glissez-déposez simplement une image pour obtenir sa chaîne Base64.

Ce qu'est réellement le Base64

Le Base64 est un schéma d'encodage binaire-vers-texte défini dans la RFC 4648 (octobre 2006). Il utilise un alphabet de 64 caractères, A-Z, a-z, 0-9, plus + et / : pour représenter des octets arbitraires en ASCII imprimable. Trois octets d'entrée binaire deviennent exactement quatre caractères de sortie, car le plus petit commun multiple de 6 bits (un caractère Base64) et de 8 bits (un octet) est 24. Ce rapport de quatre pour trois explique aussi pourquoi un fichier encodé en Base64 est environ 33 % plus volumineux que le binaire d'origine.

Lorsque la longueur de l'entrée n'est pas un multiple de trois, le Base64 complète avec = pour que la sortie soit toujours un multiple de quatre caractères : un octet final produit deux caractères plus == ; deux octets finaux produisent trois caractères plus =. Certains encodeurs suppriment le remplissage, de sorte qu'un décodeur robuste doit recompléter avant de passer la chaîne à atob().

La RFC 4648 définit aussi une variante adaptée aux URL (parfois appelée base64url) qui remplace + par - et / par _. Les JWT l'utilisent. Ce décodeur normalise les deux alphabets pour que vous n'ayez pas à vous soucier de celui qu'on vous a remis.

Le schéma d'URI de données

La RFC 2397 (août 1998) définit le schéma d'URL data:. La grammaire complète est :

data:[<mediatype>][;base64],<data>

Un PNG en ligne typique ressemble à data:image/png;base64,iVBORw0KGgo…. Le jeton ;base64 est un marqueur (notez l'absence de signe =) qui indique au navigateur de décoder la charge utile depuis le Base64 au lieu de la traiter comme du texte en encodage pour cent. Si vous omettez ;base64, les données sont interprétées comme du texte encodé pour URL. Si vous omettez entièrement le type de média, la spécification utilise text/plain;charset=US-ASCII par défaut.

Ce décodeur accepte les deux formes : collez un URI de données complet ou seulement la charge utile Base64. Lorsque seule la charge utile est fournie, le format est détecté à partir des premiers octets décodés, voir ci-dessous.

Comment le format est détecté

Si vous collez une chaîne Base64 brute sans préfixe data:image/…, le seul moyen de savoir de quel type d'image il s'agit est d'examiner les premiers octets décodés : chaque format d'image courant commence par une signature reconnaissable, formellement appelée « nombre magique ». Les navigateurs effectuent exactement la même vérification lorsqu'ils reniflent les types MIME (la procédure figure dans la norme WHATWG MIME Sniffing). L'astuce, c'est que ces signatures se traduisent par des préfixes Base64 prévisibles :

FormatPremiers octets (hex)Préfixe Base64
PNG89 50 4E 47 0D 0A 1A 0AiVBORw0KGgo
JPEGFF D8 FF/9j/
GIF89a47 49 46 38 39 61R0lGODlh
WebP52 49 46 46 … 57 45 42 50UklGR
BMP42 4D (« BM »)Qk
SVG (texte XML)commence par <?xml ou <svgPD94bWwg ou PHN2Zw

La signature du PNG est l'une des plus astucieuses du zoo des formats. L'octet 89 a son bit de poids fort activé, de sorte qu'un relais de courrier limité à 7 bits le corrompt de façon visible. Les trois octets suivants épellent PNG en ASCII, de sorte qu'un humain exécutant head sur le fichier peut le reconnaître. Viennent ensuite une fin de ligne DOS (0D 0A), un Ctrl-Z de MS-DOS qui empêche l'ancienne commande TYPE d'afficher la suite, et un saut de ligne Unix (0A) : ensemble, ils détectent tous les transports courants qui réécrivent « obligeamment » les fins de ligne.

D'où viennent les images Base64

La plupart des gens qui atterrissent sur un outil comme celui-ci sont en train de déboguer quelque chose. Situations courantes :

Faut-il intégrer les images en Base64 ?

Le compromis était autrefois plus intéressant. Sous HTTP/1.1, chaque image était une requête bloquante distincte, et intégrer une petite icône pouvait économiser un véritable aller-retour. Sous HTTP/2 et HTTP/3, l'intérêt s'est fortement réduit. Résumé honnête :

Ce que vous gagnez : zéro requête HTTP supplémentaire, une livraison atomique, et des artefacts autonomes qui fonctionnent sans dépendances externes (démos en un seul fichier, e-mail, PDF rendus côté serveur).

Ce que vous perdez : le navigateur ne peut pas mettre en cache un URI de données intégré séparément, de sorte que la même image sur dix pages est retéléchargée à chaque réponse HTML. La ressource encodée est environ 33 % plus volumineuse que l'équivalent binaire. Les CDN ne peuvent pas dédupliquer les images intégrées sur plusieurs pages. Les pipelines d'optimisation d'image (Cloudinary, Vercel, <Image> de Next.js) ne peuvent pas inspecter, compresser, redimensionner ni servir des formats modernes comme AVIF ou WebP pour les ressources intégrées. Le navigateur doit aussi décoder d'abord le Base64 puis l'image, ce qui représente un surcoût de CPU à chaque rendu.

Règles empiriques raisonnables : intégrez les images de moins de 4 Ko environ utilisées à un seul endroit, les placeholders d'un seul pixel, et les images qui doivent voyager à l'intérieur d'un fichier autonome. N'intégrez rien qui soit utilisé sur plus d'une page, rien de plus grand qu'environ 4 Ko, rien qui devrait être chargé en différé, ni rien qui bénéficie d'une négociation de format.

Sécurité : ce que le Base64 ne fait pas

Le Base64 est un encodage, pas un chiffrement. La RFC 4648 § 12 avertit explicitement qu'il « masque visuellement » les données mais n'offre « aucune confidentialité informatique » : n'importe qui peut le décoder instantanément. N'encodez pas en Base64 des mots de passe ou des clés d'API en pensant que c'est une mesure de sécurité.

Deux détails de sécurité à connaître :

Autres questions

Pourquoi ma chaîne Base64 échoue-t-elle avec « InvalidCharacterError » ?

Trois causes habituelles : des espaces ou des sauts de ligne parasites issus d'un copier-coller (l'ancien profil MIME Base64 coupe les lignes à 76 caractères, ce que atob() de JavaScript rejette) ; du Base64 adapté aux URL avec - et _ au lieu de + et / ; ou un remplissage = final supprimé, de sorte que la longueur n'est pas un multiple de quatre. Ce décodeur nettoie les espaces, normalise l'alphabet et recomplète avant de décoder, mais les chaînes très corrompues échouent quand même.

Est-ce que je perds en qualité lors du décodage ?

Non. Le décodage est l'inverse exact de l'encodage : vous récupérez l'image d'origine octet par octet. Le téléchargement se fait dans le format qui était dans le Base64 (PNG, JPEG, WebP, GIF, BMP ou SVG), sans étape de réencodage.

Quel est le plus grand URI de données qu'un navigateur acceptera ?

D'après MDN, les limites actuelles sont d'environ 512 Mo pour Chromium et Firefox, et d'environ 2 Go pour Safari/WebKit. En pratique, le goulot d'étranglement est la mémoire et le CPU plutôt que la spécification d'URL : les collages au-dessus d'environ 10 Mo commencent à paraître lents sur un ordinateur portable typique.

Des données sont-elles envoyées à un serveur ?

Non. Le décodage se produit entièrement dans votre navigateur via la fonction native atob() et un Blob ou un URI de données affecté à une balise <img>. Rien n'est téléversé ; la page fonctionne hors ligne une fois chargée.

Pourquoi le Base64 de chaque JPEG commence-t-il par /9j/ ?

Presque tous les fichiers JPEG dans la nature commencent par les octets FF D8 FF (marqueur Start-Of-Image suivi d'un autre octet de marqueur). Lorsque vous encodez en Base64 trois octets qui sont tous FF avec un D8 au milieu, le motif de bits 11111111 11011000 11111111 se découpe en groupes de 6 bits 111111 111101 100011 111111 : les positions 63, 61, 35, 63 de l'alphabet Base64, qui épellent /9j/. Le quatrième caractère varie ensuite selon le marqueur qui suit (E0 pour JFIF, E1 pour Exif), mais les trois premiers sont universels.

Outils associés

Convertisseur image → Base64, gratuit Encodage et décodage Base64 en ligne, gratuits Compression d'images en ligne, gratuite