Decoder immagine Base64

Incolla una stringa Base64 per visualizzare in anteprima e scaricare l'immagine.

I tuoi dati non lasciano il tuo dispositivo
L'immagine decodificata apparirà qui

Come usare

  1. Incolla una stringa di immagine codificata in Base64 nella casella di input. Può includere il prefisso data:image/… o contenere solo i dati Base64 grezzi.
  2. Clicca su Decodifica l'immagine per visualizzarne l'anteprima.
  3. Clicca su Scarica l'immagine per salvarla come file PNG.

Domande frequenti

Quali formati Base64 sono supportati?

Puoi incollare una stringa Base64 grezza (lo strumento rileva il formato automaticamente) o un Data URI completo come data:image/png;base64,iVBOR…. Tipi di immagine supportati: PNG, JPEG, WebP, GIF, BMP e SVG.

C'è un limite di dimensione?

Non c'è un limite rigoroso, ma stringhe Base64 molto grandi (oltre 5–10 MB) possono essere lente da elaborare a seconda del tuo dispositivo.

Come faccio a codificare un'immagine in Base64?

Usa il nostro Convertitore da immagine a base64 · trascina e rilascia un'immagine per ottenerne la stringa Base64.

Cos'è davvero Base64

Base64 è uno schema di codifica da binario a testo definito nella RFC 4648 (ottobre 2006). Utilizza un alfabeto di 64 caratteri, A-Z, a-z, 0-9, più + e /, per rappresentare byte arbitrari come ASCII stampabile. Ogni tre byte di input binario diventano esattamente quattro caratteri di output, perché il minimo comune multiplo di 6 bit (un carattere Base64) e 8 bit (un byte) è 24. Questo rapporto quattro-a-tre è anche il motivo per cui un file codificato in Base64 è circa il 33% più grande del binario originale.

Quando la lunghezza dell'input non è un multiplo di tre, Base64 aggiunge padding con = in modo che l'output sia sempre un multiplo di quattro caratteri: un byte finale produce due caratteri più ==; due byte finali producono tre caratteri più =. Alcuni encoder eliminano il padding, quindi un decoder robusto deve aggiungere nuovamente il padding prima di passare la stringa a atob().

RFC 4648 definisce anche una variante URL-safe (a volte chiamata base64url) che sostituisce + con - e / con _. I JWT la usano. Questo decoder normalizza entrambi gli alfabeti così non è necessario preoccuparsi di quale si ha tra le mani.

Lo schema URI dati

RFC 2397 (agosto 1998) definisce lo schema URL data:. La grammatica completa è:

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

Un PNG inline tipico ha l'aspetto data:image/png;base64,iVBORw0KGgo…. Il token ;base64 è un marcatore (notare l'assenza del segno =) che indica al browser di decodificare il payload da Base64 anziché trattarlo come testo con codifica percentuale. Se si omette ;base64, i dati vengono interpretati come testo con codifica URL. Se si omette del tutto il media type, la specifica usa come valore predefinito text/plain;charset=US-ASCII.

Questo decoder accetta entrambe le forme: incollare un data URI completo o solo il payload Base64. Quando viene fornito solo il payload, il formato viene rilevato dai primi byte decodificati; vedere di seguito.

Come viene rilevato il formato

Se si incolla una stringa Base64 grezza senza il prefisso data:image/…, l'unico modo per sapere che tipo di immagine sia è guardare i primi byte decodificati; ogni formato di immagine comune inizia con una firma riconoscibile, formalmente chiamata «numero magico». I browser eseguono esattamente lo stesso controllo durante lo sniffing dei tipi MIME (la procedura è nello standard WHATWG MIME Sniffing). Il punto è che quelle firme si traducono in prefissi Base64 prevedibili:

FormatoPrimi byte (hex)Prefisso 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 (testo XML)inizia con <?xml o <svgPD94bWwg o PHN2Zw

La firma PNG è una delle più intelligenti nel panorama dei formati. Il byte 89 ha il bit più significativo impostato in modo che un relay di posta a soli 7 bit lo corrompa visibilmente. I tre byte successivi compongono PNG in ASCII, così un essere umano che esegue head sul file può riconoscerlo. Poi arrivano un terminatore di riga DOS (0D 0A), un Ctrl-Z di MS-DOS che impedisce al comando legacy TYPE di continuare la stampa, e un avanzamento di riga Unix (0A); insieme rilevano ogni comune sistema di trasporto che riscrive «utilmente» le terminazioni di riga.

Da dove provengono le immagini Base64

La maggior parte delle persone che arrivano a uno strumento come questo stanno facendo debug di qualcosa. Situazioni comuni:

Si dovrebbero incorporare inline le immagini come Base64?

Il compromesso era più interessante in passato. Con HTTP/1.1 ogni immagine era una richiesta bloccante separata e incorporare inline una piccola icona poteva risparmiare un vero round-trip. Con HTTP/2 e HTTP/3 il vantaggio si è ridotto notevolmente. Sintesi onesta:

Si guadagna: zero richieste HTTP aggiuntive, consegna atomica e artefatti autonomi che funzionano senza dipendenze esterne (demo a file singolo, e-mail, PDF renderizzati lato server).

Si perde: il browser non può memorizzare nella cache separatamente un data URI inline, quindi la stessa immagine su dieci pagine viene riscaricata con ogni risposta HTML. L'asset codificato è circa il 33% più grande dell'equivalente binario. I CDN non possono deduplicare le immagini incorporate su più pagine. Le pipeline di ottimizzazione delle immagini (Cloudinary, Vercel, Next.js <Image>) non possono ispezionare, comprimere, ridimensionare o servire formati moderni come AVIF o WebP per gli asset inline. Il browser deve anche decodificare prima il Base64 e poi l'immagine, con un costo CPU aggiuntivo a ogni render.

Regole pratiche ragionevoli: incorporare inline le immagini più piccole di circa 4 KB usate in un solo posto, i segnaposto a pixel singolo e le immagini che devono viaggiare all'interno di un file autonomo. Non incorporare inline nulla che venga usato su più di una pagina, nulla di più grande di circa 4 KB, nulla che debba essere caricato in lazy o nulla che benefici della negoziazione del formato.

Sicurezza: cosa non fa Base64

Base64 è codifica, non cifratura. RFC 4648 §12 avverte esplicitamente che «nasconde visivamente» i dati ma non fornisce «nessuna confidenzialità computazionale»; chiunque può decodificarli istantaneamente. Non codificare in Base64 password o chiavi API pensando che sia una misura di sicurezza.

Due dettagli di sicurezza da conoscere:

Altre domande

Perché la mia stringa Base64 fallisce con «InvalidCharacterError»?

Tre cause usuali: spazi bianchi o interruzioni di riga spurie da un copia-incolla (il vecchio profilo MIME Base64 va a capo a 76 caratteri, che JavaScript atob() rifiuta); Base64 URL-safe con - e _ al posto di + e /; oppure il padding = finale eliminato così la lunghezza non è un multiplo di quattro. Questo decoder pulisce gli spazi bianchi, normalizza l'alfabeto e aggiunge nuovamente il padding prima della decodifica, ma le stringhe molto corrotte falliscono comunque.

Si perde qualità durante la decodifica?

No. La decodifica è l'inverso esatto della codifica; si recupera byte per byte l'immagine originale. Il download è nel formato presente nel Base64 (PNG, JPEG, WebP, GIF, BMP o SVG), senza alcuna fase di ri-codifica.

Qual è il data URI più grande che un browser accetterà?

Secondo MDN, i limiti attuali sono circa 512 MB per Chromium e Firefox, e circa 2 GB per Safari/WebKit. In pratica il collo di bottiglia è la memoria e la CPU piuttosto che la specifica URL; i testi incollati superiori a circa 10 MB iniziano a sembrare lenti su un laptop tipico.

Vengono inviati dati a un server?

No. La decodifica avviene interamente nel browser tramite la funzione nativa atob(), un Blob o un data URI assegnato a un tag <img>. Nulla viene caricato; la pagina funziona offline una volta caricata.

Perché il Base64 di ogni JPEG inizia con /9j/?

Quasi ogni file JPEG in circolazione inizia con i byte FF D8 FF (marcatore Start-Of-Image seguito da un altro byte marcatore). Quando si codifica in Base64 una sequenza con FF e D8 nel mezzo, il pattern di bit 11111111 11011000 11111111 si divide in gruppi da 6 bit 111111 111101 100011 111111: posizioni dell'alfabeto Base64 63, 61, 35, 63, che compongono /9j/. Il quarto carattere varia poi in base al marcatore che segue (E0 per JFIF, E1 per Exif), ma i primi tre sono universali.

Strumenti correlati

Convertitore da immagine a base64 Codificatore e decodificatore Base64 gratuito online Compressore di immagini gratuito online