Il codice di questa pagina non è partito.

Se apri index.html direttamente da una cartella, i moduli JavaScript restano bloccati, quindi non succederà niente quando sceglierai un'immagine. Servi invece la cartella via http:

powershell -ExecutionPolicy Bypass -File serve.ps1

Poi apri http://localhost:8080/.

Immagine in data URI — codificare in base64 una figura per il CSS o l'HTML

Tutta l'immagine come una riga di testo, da incollare dritta nel CSS o nell'HTML.

Lingua: Italiano
Vedi il codice
Qui non si caricano immagini, mai. Non c'è nessun server.

La codifica avviene dentro il browser che stai usando, sul tuo hardware. È aritmetica su byte che la pagina ha già: niente encoder, niente server, nessun passaggio di rete da lasciare fuori. Questo strumento non ha nessuna funzione di rete, non c'è niente da recuperare e niente da spedire, e dall'altra parte di questa pagina non c'è nessun server a cui mandare un'immagine, anche se una funzione del genere ci fosse.

Verifica dal vivo: verifica in corso…

Offline: verifica in corso…

Non fidarti della nostra parola: apri gli strumenti per sviluppatori, tieni d'occhio il pannello Rete e trascina dentro un'immagine. Non c'è una sola richiesta che porti con sé un'immagine, una miniatura, un nome di file o un byte di quello che hai scelto. Oppure stacca la connessione e codificane una lo stesso.

1 Scegli le immagini

2 Di' dove va a finire

Un data URI da solo è raramente quello che serve. Quello che serve è la riga che va nel foglio di stile, quindi scegli la riga e l'immagine ci arriva dentro già tra virgolette, che è poi la parte facile da sbagliare e l'unica che con gli SVG si rompe davvero.

Il testo alt è lasciato vuoto di proposito. Solo tu sai se l'immagine porta un significato oppure è decorazione, e per chi usa uno screen reader una descrizione indovinata da un nome di file è peggio che nessuna descrizione.

Metti in base64 anche gli SVG Disattivo di default, perché un SVG è testo e il base64 è per i byte. La codifica in percentuale lascia il markup leggibile nel foglio di stile ed è di solito un quinto più corta. Attivalo per la rara catena di strumenti che insiste su ;base64.

SVG

3 Copialo

Non hai ancora scelto niente. Trascina qui sopra un'immagine e la riga da incollare compare qui.

Vedi come Markdown

Come trasformare un'immagine in un data URI

  1. Scegli le immagini. Trascinale sul riquadro, oppure selezionale a mano. Le legge il browser direttamente dal tuo disco, e mentre lo fa non parte niente per nessuna destinazione.
  2. Di' dove va a finire il risultato. L'URI da solo, una regola CSS, una proprietà personalizzata, un tag <img> oppure del Markdown. Ognuno di questi mette l'URI tra virgolette, che è poi il dettaglio da cui dipende se un SVG incorporato funziona o smette di funzionare in silenzio.
  3. Leggi quanto è costato. Ogni risultato dice in quanti caratteri si è trasformato, quanto è più grande del file di partenza, e se incorporare qualcosa di quella dimensione sia una buona idea. Il base64 aggiunge un terzo; se quel terzo valga una richiesta risparmiata dipende interamente dalla dimensione, e la pagina ti dice da che parte della linea ti trovi.
  4. Guarda gli avvisi. Se l'immagine porta con sé EXIF, un profilo colore o XMP, te lo nomina insieme a quanti byte del tuo risultato sono quella roba lì. Se l'estensione non concorda con il formato vero, la pagina segue il formato e te lo dice. E se il tuo browser non riesce a disegnare il risultato, dice anche questo.
  5. Copia, oppure scarica. Un pulsante per ogni risultato, e uno per tutti insieme. Le proprietà personalizzate escono avvolte in un blocco :root, pronte da incollare in cima a un foglio di stile.

La versione lunga

Quando mettere un'immagine dentro il tuo CSS, e quando no Quanto costa un data URI, perché il base64 aggiunge un terzo e il gzip non lo restituisce, perché un SVG non va mai messo in base64, e l'errore di virgolette che rompe in silenzio gli SVG incorporati.

Domande

La mia immagine viene caricata da qualche parte?

No. Il file lo legge e lo codifica il tuo browser sul tuo hardware, con due funzioni che si ritrova già. Questo strumento non ha nessuna funzione di rete: non recupera mai niente e non spedisce mai niente. La Content-Security-Policy della pagina elenca poi tutti gli indirizzi che può contattare, e nessuno di quelli appartiene a questo sito.

Cos'è un data URI?

Un modo di scrivere un intero file dove di solito andrebbe un indirizzo web. Invece di url("logo.png"), che dice al browser di andare a recuperare qualcosa, scrivi url("data:image/png;base64,iVBORw0..."), che l'immagine ce l'ha già dentro. Il browser la decodifica sul posto. L'effetto pratico è una richiesta in meno, perché l'immagine arriva insieme al foglio di stile o alla pagina invece che dopo.

Perché il mio SVG non è in base64?

Perché per lui il base64 è la codifica sbagliata. Un SVG è testo, e un URL il testo lo sa già portare: c'è solo una manciata di caratteri da proteggere. Codificando in percentuale quelli e lasciando stare il resto viene fuori un URI che di solito è un quinto più corto del base64 dello stesso file, e che nel foglio di stile riesci ancora a leggere, con i nomi degli elementi, i colori e il viewBox tutti ancora lì da modificare. C'è comunque una casella per forzare il base64, per quella rara catena di strumenti che ci insiste.

Di quanto ingrandisce la mia immagine il base64?

Di circa un terzo. Tre byte di file diventano quattro caratteri di base64, cioè il 33% prima ancora del data:image/png;base64, che ci va davanti. È il minimo, ed è inevitabile, perché è quanto costa scrivere byte qualunque usando soltanto i caratteri che un URL consente. È anche il motivo per cui la pagina ti mette il numero di caratteri accanto alla dimensione del file, invece di lasciartelo scoprire a foglio di stile pubblicato.

Quando conviene davvero incorporare un'immagine?

Quando è piccola e serve subito. Un'icona da 2 KB dentro un foglio di stile che ogni pagina carica è un guadagno netto: un giro in meno, e l'immagine c'è nel momento stesso in cui c'è il CSS. Oltre i 10 KB circa lo scambio si rovescia. Un'immagine incorporata non è più un file a sé, quindi non può stare in cache per conto suo, non può essere recuperata in parallelo con altro, e viene riscaricata per intero ogni volta che cambia il file attorno: una fotografia da 200 KB in un foglio di stile sono 200 KB aggiunti al percorso critico di ogni pagina del sito. La pagina ti dice da che parte di quella linea cade ogni risultato.

Il gzip annulla quello che il base64 aggiunge?

Meno di quanto si creda. Il base64 di un file già compresso, e un PNG, un JPEG e un WebP lo sono tutti, si comprime male, perché di ridondanza da trovare al compressore non ne è rimasta quasi più; di solito ti torna indietro qualcosa come un decimo di quel terzo che il base64 aveva aggiunto, non tutto. Un SVG codificato in percentuale è il caso opposto: è ancora testo, quindi si comprime più o meno come prima, che è un'altra ragione per non metterlo in base64.

Questo cambia in qualche modo la mia immagine?

No, ed è una differenza voluta rispetto a quasi tutti gli strumenti di qui. Niente viene decodificato in pixel e ricodificato: i byte usciti dal tuo disco sono gli stessi byte che entrano nell'URI. Un JPEG resta esattamente il JPEG che era, alla stessa qualità e con le stesse dimensioni. È per questo che il risultato si può chiamare lo stesso file, e non una copia.

Quindi anche i miei dati EXIF e GPS finiscono nel foglio di stile?

Sì, ed è la parte a cui vale la pena pensare prima di incollare. Siccome non viene ricodificato niente, tutto quello che ha scritto la fotocamera viaggia insieme all'immagine: la posizione, l'orario, il numero di serie della fotocamera. Su una foto da telefono possono essere 30 KB del file, che diventano 40 KB di base64 sul percorso critico della tua pagina, più un indirizzo di casa dentro qualcosa che finirà depositato in un repository. La pagina legge quanti metadati ci sono in un JPEG, un PNG o un WebP e te lo dice. Per toglierli prima, c'è il visualizzatore e rimozione EXIF.

Perché ha usato un tipo diverso dall'estensione del mio file?

Perché l'estensione può sbagliarsi e i byte no. Un file chiamato logo.png che in realtà era stato esportato come JPEG è abbastanza comune da costringere qualunque strumento per immagini a farci i conti, e un data URI che dichiara il tipo sbagliato semplicemente non compare: non c'è nessun ripiego e non c'è nessun messaggio d'errore che valga la pena leggere. Quindi il tipo si legge dai primi byte del file, che dicono cos'è senza ambiguità in tutti i formati di qui, e la pagina ti avverte quando i due non concordano.

L'anteprima è vuota. Cosa è andato storto?

Probabilmente niente che riguardi l'URI. HEIC e TIFF producono tutti e due data URI perfettamente validi che nessun browser tranne Safari disegna, quindi l'immagine mancherà anche ovunque tu la incolli: convertila prima in PNG, JPEG o WebP con il compressore di immagini o con il ridimensionatore di immagini. Se invece il formato è uno di quelli comuni, è probabile che sia il file stesso a essere danneggiato: l'anteprima è disegnata a partire dall'URI che questa pagina ha costruito, quindi se resta vuota vuol dire che l'immagine non si è decodificata.

C'è un limite di dimensione per un data URI?

Non uno in cui andrai a sbattere nel CSS o in un tag <img>: lì i browser moderni non impongono nessun tetto pratico. Quello che i browser limitano davvero è scrivere un data URI nella barra degli indirizzi, cosa che ormai quasi tutti rifiutano per qualunque contenuto non banale, per ragioni di sicurezza che con questo uso non c'entrano niente. Il limite vero è quello di sopra: molto prima che si rompa qualcosa di tecnico, la pagina che lo contiene è diventata più lenta di quanto sarebbe stata con un normale file immagine.

È gratis, e mi serve un account?

È gratis, e non c'è account, non c'è registrazione, non c'è periodo di prova e non c'è filigrana. Non c'è nemmeno un limite al numero o alla dimensione dei file, perché non c'è nessun server che li paga: il lavoro lo fa il tuo dispositivo. Il sito ha della pubblicità, ed è quella che lo mantiene; agli annunci non arriva niente sulle tue immagini.

Funziona offline?

Sì. Carica la pagina una volta, poi stacca la connessione e continua a funzionare. È anche il modo più semplice per dimostrare che non viene caricato niente, perché uno strumento che spedisse via le tue immagini per codificarle si fermerebbe nell'istante in cui stacchi la spina.