Dimensioni file immagine decodificata Base64

0

So che i dati binari codificati in base 64 sono pari a 1,37 volte i dati originali in base a Wikipedia .

Che cosa succede se decodifica quella stringa con la funzione php base64_decode($encoded_string); e poi fai l'immagine fuori da quel imagecreatefromstring($data); in questo modo:

//Decode 
$data = base64_decode($encoded_string);

//Create image
$img = imagecreatefromstring($data);
$output = imagejpeg($img, $filepath, 100);

La mia domanda è, la dimensione finale del file dell'immagine sarà anche di 1,37 volte i dati originali? Attualmente la penso così, ma non sono sicuro al 100% su quale sia la dimensione dell'immagine finale più grande.

    
posta Orangutan 04.08.2016 - 11:11
fonte

1 risposta

1

La codifica base64 è un modo per codificare i dati binari usando solo un insieme di 64 caratteri stampabili.

Il trucco consiste nel raggruppare i bit originali in pacchetti di 6 bit (6 bit possono assumere un valore compreso tra 0 e 63) e quindi inviare la lettera corrispondente nella sua codifica ascii di 8 bit. Quindi ogni gruppo di 3 byte binari (3 * 8 = 24 bit) può essere codificato in 4 cifre base64 (4x6 = 24). Se il numero totale di byte non è un multiplo di 3, le tue 4 ultime cifre di base64 avranno alcuni caratteri di riempimento che indicheranno il numero di bit inutili.

Quindi la lunghezza esatta della codifica base64 è: floor((binary_size+2) / 3) * 4 . Il rapporto base64 / originale converge a 4/3 per le grandi dimensioni, ma per i dati piccoli il rapporto può essere più elevato (ad esempio 4 per un messaggio originale di 1 byte). Poiché base64_encode() codifica in modo conforme a MIME, devi contare anche le nuove righe (almeno uno ogni 76 caratteri di base64).

Per la decodifica è esattamente l'opposto. Per calcolare la lunghezza esatta devi sapere se alla fine ci sono uno o due caratteri di riempimento, ma se vuoi conoscere una dimensione massima, è solo (base64_size/4)*3 .

Ma indipendentemente dalla dimensione più o meno gonfiata della codifica base64: l'immagine decodificata dovrebbe avere esattamente la stessa dimensione di quella codificata. Lo schema di codifica base64 lo garantisce.

    
risposta data 04.08.2016 - 16:32
fonte

Leggi altre domande sui tag