Qual è l'effetto della codifica di un'immagine in base64?


94

Se converto un'immagine (jpg o png) in base64, sarà più grande o avrà le stesse dimensioni? Quanto sarà maggiore?

Si consiglia di utilizzare immagini con codifica base64 sul mio sito Web?


1
L'unica volta in cui vorresti fare qualcosa del genere è se fossi limitato alle risorse di testo normale e non potessi utilizzare un formato di immagine raw per qualche motivo.
Wug

C'è una buona risposta qui: stackoverflow.com/questions/1533113/…
Steed

base64 rende impossibili i deeplink. Questo può essere un vantaggio.
damoeb

@Wug - Sappi che questa è tutt'altro che una risposta tardiva e che le cose sono cambiate, ma sicuramente sono momenti in cui puoi ottenere miglioramenti delle prestazioni inviando bas64. L'invio di messaggi tramite websocket con immagini codificate in base64 (piccole) sarebbe più performante rispetto alla richiesta di ciascuna immagine da sola.
Philip

È una bella domanda. Stavo cercando una buona risposta per "salvare immagini binarie o codificate in base64?" e ho trovato diverse buone risposte come questa
moreirapontocom

Risposte:


129

Sarà circa il 37% più grande:

Più o meno, la dimensione finale dei dati binari con codifica Base64 è pari a 1,37 volte la dimensione dei dati originali

Fonte: http://en.wikipedia.org/wiki/Base64


28
No, non il 137% più grande, il 137% della dimensione originale :-) 37% più grande (secondo la tua fonte).
Eric J.

4
Direi che è praticamente 4/3 della dimensione originale.
kiwixz

C'è qualche limitazione per la dimensione dell'immagine per convertire l'immagine in base64?
151291

2
@ Blender Ma nel mio caso, quando converto una bitmap da 70 kb in una stringa, diventa 500 kb, non il 37%, ho compresso un'immagine da 5 mb a 70 kb e poi converto l'immagine compressa in una stringa che diventa 500 kb.
KJEjava48

@ KJEjava48: Come lo converti in una stringa?
Blender

16

Ecco una panoramica davvero utile di David Calhoun su quando codificare base64 e quando no .

Risposta di base = i file con codifica base64 compressi saranno più o meno paragonabili in termini di dimensioni del file al binario standard (jpg / png). I file binari Gzip avranno una dimensione di file inferiore.

Da asporto = C'è qualche vantaggio nel codificare e comprimere le icone dell'interfaccia utente, ecc., Ma non è saggio farlo per immagini più grandi.


14

Sarà più grande in base64.

Base64 utilizza 6 bit per byte per codificare i dati, mentre binario utilizza 8 bit per byte. Inoltre, c'è un piccolo sovraccarico di riempimento con Base64. Non tutti i bit vengono utilizzati con Base64 perché è stato sviluppato in primo luogo per codificare dati binari su sistemi che possono elaborare correttamente solo dati non binari.

Ciò significa che l'immagine codificata sarà più grande di circa il 25%, più un sovraccarico costante per il riempimento.


7

La codifica di un'immagine in base64 la renderà più grande di circa il 30%.

Vedere i dettagli nell'articolo di wikipedia sullo schema URI dei dati , dove si afferma:

Gli URI di dati con codifica Base64 hanno dimensioni maggiori di 1/3 rispetto al loro equivalente binario. (Tuttavia, questo overhead viene ridotto al 2-3% se il server HTTP comprime la risposta utilizzando gzip)


7

La risposta è: dipende.

Sebbene le immagini base64 siano più grandi, esistono alcune condizioni in cui base64 è la scelta migliore.

Dimensioni delle immagini base64

Base64 utilizza 64 caratteri diversi e questo è 2 ^ 6. Quindi base64 memorizza un carattere a 6 bit per 8 bit. Quindi la proporzione è 6/8 dai dati non convertiti ai dati base64. Questo non è un calcolo esatto, ma una stima approssimativa.

Esempio:

Un'immagine da 48kb necessita di circa 64kb come immagine convertita in base64.

Calcolo: (48/6) * 8 = 64

Calcolatrice CLI semplice su sistemi Linux:

$ cat /dev/urandom|head -c 48000|base64|wc -c
64843

O usando un'immagine:

$ cat my.png|base64|wc -c

Base64-immagini e siti web

Questa domanda è molto più difficile da rispondere. In generale, quanto più grande è l'immagine tanto meno ha senso usare base64. Ma considera i seguenti punti:

  • Molte immagini incorporate in un file HTML o in un file CSS possono avere stringhe simili. Per i PNG trovi spesso caratteri "A" ripetuti. Utilizzando gzip (a volte chiamato "deflate"), potrebbe esserci anche una vittoria sulle dimensioni. Ma dipende dal contenuto dell'immagine.
  • Overhead delle richieste di HTTP1.1: specialmente con molti cookie puoi facilmente avere qualche kilobyte in più per richiesta. L'incorporamento di immagini base64 potrebbe far risparmiare larghezza di banda.
  • Non codificare in base64 immagini SVG, perché gzip è più efficace su XML che su base64.
  • Programmazione: sulle immagini generate dinamicamente è più facile consegnarle in una richiesta per coordinare due richieste dipendenti.
  • Link profondi: se vuoi impedire il download dell'immagine, è un po 'più complicato estrarre un'immagine da una pagina HTML.

3

Ti costerà sicuramente più spazio e larghezza di banda se desideri utilizzare immagini con codifica base64. Tuttavia, se il tuo sito ha molte piccole immagini, puoi ridurre il tempo di caricamento della pagina codificando le tue immagini in base64 e inserendole in html. In questo modo, il browser client non avrà bisogno di fare molte connessioni alle immagini, ma le avrà in html.


Tuttavia, questo non sarà un problema una volta che HTTP 2 sarà realmente disponibile.
Philip

@Philip È vero, ma mi piace il fattore di portabilità nell'avere tutte le risorse contenute nel file HTML. Ciò aiuterà con il caching del Web mobile in aree con reti irregolari.
aalaap

@aalaap Il problema è che se fai una modifica sulla pagina, devi ricaricare tutto il contenuto, comprese le immagini. Dove se hai le risorse separate puoi avere un'età più alta su quelle e verrà memorizzata nella cache e non ricaricata nella cache che scade nella pagina stessa.
Philip
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.