Comment convertir du Base64 en image
- Collez la chaîne dans la zone. Une longue valeur enregistrée dans un fichier peut être ouverte avec Ouvrir un fichier .txt ou déposée sur la zone.
- Avec En direct activé, l’image se décode dès que vous collez la chaîne. La ligne d’état indique si le Base64 est valide, la variante (standard ou Base64URL), le nombre d’octets et le format Détecté.
- Vérifiez l’aperçu. En dessous figurent le type, le type MIME, l’extension, la taille en octets, les dimensions en pixels et l’empreinte SHA-256.
- Modifiez le Nom du fichier si vous le souhaitez et appuyez sur Télécharger le fichier. Copier en data URI vous donne à la place une URI
data:propre pour du HTML ou du CSS.
Exemple charge un petit PNG, pour voir à quoi ressemble la sortie avant de coller vos propres données.
Ce que vous pouvez coller
Le décodeur tolère ce qui entoure le Base64, car les chaînes d’images arrivent rarement propres :
- Du Base64 brut, tel que le renvoie une API :
iVBORw0KGgoAAAANSUhEUg... - Une data URI :
data:image/png;base64,iVBORw0KGgo... - Du code qui en contient une :
background-image: url("data:image/svg+xml;base64,..."),<img src="data:image/jpeg;base64,...">, une image Markdown, ou un champ JSON dont la valeur est une data URI. La première data URI est extraite pour vous. - Du Base64 coupé en lignes, issu de sources d’e-mails ou d’une sortie de type PEM, avec des espaces ou des sauts de ligne tous les 64 ou 76 caractères.
- Du Base64 URL-safe avec
-et_, des chaînes sans remplissage=et des valeurs entre guillemets.
Si le Base64 se trouve dans un champ JSON sans préfixe data:, copiez uniquement la valeur entre les guillemets. Un document JSON entier est rejeté comme Base64 non valide, car { ne fait pas partie de l’alphabet.
Comment le format est détecté
Chaque format d’image commence par une signature fixe, ses « magic bytes ». L’outil décode la chaîne et compare les premiers octets à ces signatures : une chaîne étiquetée image/png qui contient en réalité un JPEG est reconnue comme JPEG. Les mêmes signatures sont visibles dans le Base64 lui-même, ce qui aide à lire des logs ou des dumps de base de données :
| Format | Premiers octets | Le Base64 commence par | Type MIME |
|---|---|---|---|
| PNG | 89 50 4E 47 0D 0A 1A 0A | iVBORw0KGgo | image/png |
| JPEG | FF D8 FF | /9j/ | image/jpeg |
| GIF | GIF89a / GIF87a | R0lGODlh / R0lGODdh | image/gif |
| WebP | RIFF, taille, WEBP | UklGR, avec XRUJQ aux caractères 12–16 | image/webp |
| SVG | <svg / <?xml | PHN2Zy / PD94bWwg | image/svg+xml |
| ICO | 00 00 01 00 | AAABAA | image/x-icon |
| BMP | BM | Qk | image/bmp |
| HEIC | taille, ftypheic | AAAA, puis eXBoZWlj au caractère 9 | image/heic |
| TIFF | II* / MM* | SUkqAA / TU0AKg | image/tiff |
Les fichiers AVIF, JPEG XL et de curseur (.cur) sont aussi détectés. Quand une data URI déclare un type que le contenu contredit, une note affiche les deux. Si les données ne sont pas du tout une image, par exemple un PDF, la page le signale et propose un bouton Télécharger en .pdf. La page des préfixes Base64 courants liste les signatures de bien d’autres types de fichiers.
Pourquoi l’image ne s’affiche pas
La chaîne a été tronquée. Les valeurs Base64 sont coupées par les limites de longueur de ligne des logs, la taille des colonnes de base de données, les cellules de tableur (32 767 caractères) et les copier-coller depuis un terminal. Un JPEG ou un PNG ne s’affiche alors qu’en partie, ou l’aperçu échoue. Si un caractère de trop ou de moins rend la longueur impossible, vous obtenez l’erreur « Longueur incorrecte ». Une chaîne valide mais trop courte se décode sans erreur : comparez donc la Taille à ce que vous attendiez.
Le type MIME de la data URI est faux. data:image/png devant des octets JPEG s’affiche en général quand même dans les navigateurs, qui détectent le type des images matricielles, mais d’autres logiciels se fient à l’étiquette. Le SVG n’est jamais détecté ainsi : avec un autre type que image/svg+xml, il ne s’affiche pas dans une balise <img>. L’outil utilise le vrai format pour l’aperçu et le téléchargement.
Des caractères ont été modifiés en route. Un + passé par un encodage de formulaire revient souvent sous forme d’espace. Quand une chaîne sur une seule ligne contient des espaces et aucun +, le décodeur retransforme les espaces en + ; quand les deux sont présents, il ne peut pas les distinguer et l’image risque de se décoder en mauvais octets. Le JSON écrit par certaines bibliothèques échappe les barres obliques en \/ ; le décodeur supprime ces échappements ainsi que les séquences \n littérales. Pour les cas plus compliqués, Réparer du Base64 liste chaque correction effectuée.
Elle est encodée deux fois. Si les octets décodés sont eux-mêmes du texte Base64, une note le signale et Décoder à nouveau retire la couche suivante. Retour revient à l’étape précédente. Cela fonctionne aussi pour les data URI dans du Base64 et pour les données compressées avec gzip ou zlib.
Le navigateur ne sait pas afficher le format. Les photos HEIC des iPhone ne s’affichent que dans Safari 17 et versions ultérieures, le TIFF uniquement dans Safari, et le JPEG XL nécessite Safari 17, Chrome 155 ou Firefox 158 ou plus récent. L’aperçu indique alors que le navigateur ne peut pas l’afficher, mais les octets sont intacts : Télécharger le fichier enregistre un fichier fonctionnel qu’une application photo peut ouvrir.
Ce n’est pas une image. Une chaîne Base64 qui commence par JVBER est un PDF, et UEsDB une archive ZIP. Utilisez Base64 en fichier, qui prévisualise documents, archives, audio et plus encore.
Enregistrer avec la bonne extension
Les champs Extension et Type MIME sont remplis d’après le format détecté tant que vous ne les modifiez pas : un PNG est donc enregistré en .png même si rien dans l’entrée n’indiquait « PNG ». Windows et les formulaires d’envoi jugent un fichier à son extension. Si vous renommez un WebP en .jpg, il reste du WebP à l’intérieur, et les logiciels stricts le refuseront.
Vous pouvez remplacer les deux champs, par exemple pour enregistrer une icône en .cur ou saisir votre propre type MIME. Un type MIME modifié fait aussi réafficher l’aperçu avec ce type.
SHA-256 et dump hex
L’empreinte SHA-256 sous l’aperçu est calculée sur les octets décodés. Comparez-la à une empreinte fournie par l’expéditeur, à un enregistrement de base de données ou à sha256sum image.png pour prouver que l’image enregistrée est exactement le fichier qui avait été encodé, octet pour octet. Pour hacher d’autres données, voir l’outil SHA-256.
Afficher le dump hex montre les 512 premiers octets. C’est le moyen le plus rapide d’inspecter un en-tête : la largeur et la hauteur d’un PNG à l’offset 0x10, le marqueur Exif d’un JPEG d’appareil photo ou le répertoire d’images d’un fichier ICO.
Confidentialité : les images restent sur votre appareil
Les images en Base64 sont souvent des choses que vous n’enverriez pas à un site web quelconque : captures d’écran d’un rapport de bug, scans d’une carte d’identité ou d’un passeport, images médicales exportées d’un portail patient, signatures recueillies sur une tablette. Cette page les décode entièrement dans votre navigateur. La Content Security Policy de la page bloque les requêtes réseau de ses scripts, hormis le comptage des pages vues de Cloudflare, et Télécharger le fichier enregistre depuis une URL blob: locale. Rien de ce que vous collez n’est stocké par le site.
Décoder une image Base64 dans le code
En Python, retirez le préfixe, rétablissez le remplissage et choisissez l’extension d’après la signature :
import base64, re
def save_image(b64: str, stem: str = "image") -> str:
b64 = re.sub(r"^data:[^,]*;base64,", "", b64.strip(), flags=re.I)
b64 = re.sub(r"\s+", "", b64).replace("-", "+").replace("_", "/")
data = base64.b64decode(b64 + "=" * (-len(b64) % 4))
if data.startswith(b"\x89PNG"):
ext = "png"
elif data.startswith(b"\xff\xd8\xff"):
ext = "jpg"
elif data.startswith(b"GIF8"):
ext = "gif"
elif data[:4] == b"RIFF" and data[8:12] == b"WEBP":
ext = "webp"
else:
ext = "bin"
with open(f"{stem}.{ext}", "wb") as f:
f.write(data)
return f"{stem}.{ext}"
Dans le navigateur, transformez la chaîne en Blob et affichez-la via une URL d’objet :
function base64ToBlob(b64, type = "image/png") {
const bin = atob(b64.replace(/^data:[^,]*;base64,/, "").replace(/\s+/g, ""));
const bytes = Uint8Array.from(bin, c => c.charCodeAt(0));
return new Blob([bytes], { type });
}
img.src = URL.createObjectURL(base64ToBlob(str));
Pour en savoir plus sur la lecture et l’écriture de données binaires, voir Base64 en Python et Base64 en JavaScript. Pour le sens inverse, Image en Base64 encode une image, avec redimensionnement et conversion de format.
FAQ
Ai-je besoin du préfixe data:image/png;base64, ?
Non. Le Base64 brut fonctionne, et le type est lu dans les octets décodés. Si vous collez une data URI complète, le préfixe est retiré pour vous et le type déclaré est comparé au contenu.
Comment savoir dans quel format d'image est une chaîne Base64 ?
Regardez les premiers caractères : iVBORw0KGgo correspond à PNG, /9j/ à JPEG, R0lGOD à GIF, UklGR à un fichier RIFF comme WebP. Collez la chaîne ci-dessus et le champ Détecté nomme le format pour vous.
Pourquoi l'image décodée semble-t-elle coupée en bas ?
La chaîne Base64 a été tronquée lors d’une copie, d’une écriture dans un log ou d’un stockage. Les navigateurs dessinent ce qu’ils peuvent d’un PNG ou d’un JPEG incomplet. Copiez à nouveau la valeur depuis la source ; aucun outil ne peut restaurer des octets absents de la chaîne.
Est-il sûr de décoder ici des captures d'écran ou des photos d'identité ?
Le décodage a lieu dans le JavaScript de cette page, et sa Content Security Policy bloque toute requête réseau de la page hormis le comptage des pages vues de Cloudflare : l’image n’est envoyée nulle part. Vous pouvez le vérifier en surveillant l’onglet Réseau des outils de développement de votre navigateur pendant le décodage.
L'outil peut-il convertir l'image décodée dans un autre format ?
Non, il enregistre exactement les octets qui avaient été encodés. Pour obtenir une version PNG, JPEG ou WebP, téléchargez le fichier, passez-le dans Image en Base64 avec Convertir en, puis décodez le résultat.