Generatore di data URI

Trasforma un testo o un file in un URL data: per HTML, CSS o JSON, usando Base64 o la codifica percentuale. Incolla un data URI esistente per esaminarne tipo MIME, set di caratteri e dimensione, vederne l’anteprima e scaricarne il contenuto.

Funziona interamente nel tuo browser. Non viene caricato nulla.

Come si usa

  1. Digita il testo o scegli il file che vuoi incorporare.
  2. Controlla o inserisci il tipo MIME, per esempio image/png o image/svg+xml, e scegli Base64 o Codifica percentuale.
  3. Copia il data URI generato nel tuo HTML, CSS o JSON.
  4. Per esaminare un data URI esistente, incollalo nella scheda Analizza per vederne tipo MIME, set di caratteri, dimensione e anteprima, e scarica il file incorporato.

Sintassi dei data URI

Un data URI, definito nella RFC 2397, trasporta un piccolo file all’interno dell’URL stesso:

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

data:text/plain;charset=UTF-8,Hello%20world
data:image/png;base64,iVBORw0KGgo...

Il tipo di media indica al browser come interpretare i dati; se viene omesso, si presume text/plain;charset=US-ASCII. Il flag ;base64 indica che la parte dopo la virgola è in Base64. Senza di esso, i dati sono testo semplice in cui i caratteri speciali sono scritti con la codifica percentuale.

Base64 o codifica percentuale

Il Base64 è la scelta giusta per i file binari come PNG, JPEG, WebP, font e PDF. Aggiunge sempre circa il 33%. Per i formati di testo la codifica percentuale è spesso più compatta, perché la maggior parte dei caratteri resta invariata e solo pochi, come <, >, #, % e le virgolette doppie, devono essere codificati. Per questo è adatta alle icone SVG, e il risultato, rimanendo leggibile, si comprime anche meglio con gzip o Brotli. Ogni byte di testo non ASCII, però, diventa tre caratteri, quindi per un testo in cinese o in cirillico il Base64 è di solito più corto. Nel dubbio, prova entrambe le opzioni e tieni il risultato più corto.

/* SVG con codifica percentuale in CSS: virgolette singole all'interno, # scritto come %23 */
.dot { background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8 8'%3E%3Ccircle cx='4' cy='4' r='4' fill='%23f60'/%3E%3C/svg%3E"); }

Quando conviene incorporare i dati

Un data URI fa risparmiare una richiesta HTTP, ma i dati diventano parte del documento che li contiene:

  • Nessuna cache separata. Un’immagine incorporata nell’HTML viene scaricata di nuovo con ogni pagina. Una incorporata in un foglio di stile viene memorizzata nella cache insieme a quel file, e modificarla invalida l’intero foglio di stile.
  • Primo rendering più lento. I data URI di grandi dimensioni nel CSS ritardano il rendering, perché il browser deve prima scaricare e analizzare l’intero foglio di stile.
  • Dimensioni maggiori. Il Base64 aggiunge un terzo, recuperato solo in parte comprimendo l’HTML o il CSS.

Con HTTP/2 e HTTP/3 le richieste aggiuntive costano poco, quindi incorpora solo risorse piccole, di pochi kilobyte, come icone, minuscoli segnaposto o uno sfondo critico, e servi tutto il resto come normali file. I siti con una Content Security Policy devono consentire data: in img-src o font-src perché immagini e font incorporati vengano caricati.

Domande frequenti

Esiste un limite di dimensione per i data URI?

La RFC 2397 non fissa alcun limite e i browser moderni accettano data URI di diversi megabyte in immagini e fogli di stile. Quelli grandi restano comunque una cattiva idea: appesantiscono la pagina, non possono essere memorizzati nella cache separatamente e richiedono più tempo per essere analizzati.

Perché un data URI non si apre quando faccio clic su un link che punta a esso?

La maggior parte dei browser impedisce alle pagine web di aprire un URL data: nella finestra principale, come protezione contro il phishing. Usa i data URI all’interno di immagini, CSS o link di download, oppure incolla l’URI nella scheda Analizza di questa pagina per vederne l’anteprima e scaricarne il contenuto.

Come si usa un data URI in HTML e CSS?
Inseriscilo ovunque sia previsto un URL: <img src="data:image/png;base64,..."> in HTML, oppure background-image: url("data:image/svg+xml,...") in CSS. Nel CSS racchiudi il valore tra virgolette, soprattutto per gli SVG con codifica percentuale.
Devo specificare un set di caratteri?
Per i tipi di testo come text/plain o text/html che contengono caratteri non ASCII, sì: aggiungi ;charset=UTF-8 dopo il tipo di media, altrimenti il valore predefinito US-ASCII potrebbe alterarli. I tipi binari come image/png non richiedono un charset.
Come trasformo un’immagine in un data URI?
Scegli qui il file dell’immagine, oppure usa Immagine in Base64, che può anche ridimensionare o convertire l’immagine prima della codifica e produce frammenti HTML, CSS e Markdown pronti all’uso.