Codifica dei file
Un computer conosce un solo «alfabeto»: 0 e 1. Allora come fa a contenere testi, foto, canzoni e video? Li codifica: traduce ogni informazione dal nostro linguaggio a quello della macchina, seguendo delle regole condivise. Qui scopri come, e come si torna indietro con la decodifica — un tipo di file alla volta.
Cos'è la codifica (e la decodifica)
Codificare = tradurre un'informazione dal «linguaggio umano» a quello della macchina, cioè in 0 e 1, usando un codice deciso in anticipo (uno standard). Decodificare è il percorso inverso: dai bit si torna all'informazione. Perché funzioni, chi scrive e chi legge devono usare lo stesso codice.
Provalo con un testo: scrivi una parola e guarda come diventa bit (codifica, col codice ASCII) e come i bit tornano testo (decodifica).
01000011 vale «C» solo perché ci siamo messi d'accordo che in ASCII 67 = C. Cambia il codice e lo stesso byte diventa un altro carattere. Ogni tipo di file ha i suoi codici: eccoli.
Il testo → codice ASCII
A ogni carattere il computer associa un numero, e quel numero lo scrive in binario (0 e 1). La tabella di base si chiama ASCII: usa 7 bit per carattere, cioè 128 caratteri possibili. Scrivi qualcosa e guarda come diventa binario:
I primi 32 codici (0–31) e il 127 sono caratteri di controllo (non si stampano: invio, tabulazione…), il 32 è lo spazio, dal 33 al 126 ci sono lettere, cifre e simboli.
Oltre l'ASCII: Unicode e UTF-8
Con 128 caratteri l'ASCII non basta per accenti, altri alfabeti ed emoji. Unicode assegna un numero (il code point, scritto U+…) a ogni carattere di ogni lingua, più gli emoji. La codifica UTF-8 scrive quel numero usando da 1 a 4 byte: i caratteri ASCII restano 1 byte, gli accentati di solito 2, molti altri 3, gli emoji 4. Scrivi qualcosa o prova gli esempi:
Le immagini → pixel e colori (RGB)
Un'immagine è una griglia di quadratini, i pixel. A ogni pixel si associa un colore. Nel modello RGB il colore nasce mescolando Rosso, Verde e Blu: 8 bit per ciascuno = 24 bit (3 byte) per pixel, cioè 16.777.216 colori. Quegli 8 bit si scrivono anche, in modo più corto, con 2 cifre esadecimali (0–9, A–F).
1 · Il colore di un pixel
Scegli un colore: lo stesso valore è scritto in tre modi — decimale (0–255), binario (8 bit) ed esadecimale (2 cifre). Questo colore diventa anche il tuo «pennello» per la griglia qui sotto.
2 · Un'immagine è una griglia di pixel
Quella che sembra una figura è in realtà una tabella di numeri, uno per pixel. Ingrandisci per vedere i singoli quadratini, passa sopra un pixel per leggerne i valori, oppure clicca per dipingerlo con il pennello scelto sopra.
3 · La scala di grigi — 1 byte per pixel
Un'immagine può non avere colori, ma solo grigi. In quel caso ogni pixel è un solo numero da 0 a 255: 0 = nero, 255 = bianco, e i valori in mezzo sono le sfumature. Serve 1 byte invece di 3, quindi l'immagine pesa un terzo. Muovi il cursore e guarda il grigio corrispondente al suo byte:
E il grigio di una foto a colori? Si ricava dalla sua luminosità: grigio = 0,299·R + 0,587·G + 0,114·B — il verde «pesa» di più perché l'occhio lo percepisce meglio.
Il suono → campionamento
Il suono è un'onda analogica (continua). Per salvarlo, il computer ne misura l'altezza a intervalli regolari: è il campionamento. Più campioni prende, più la versione digitale somiglia all'originale (ma occupa più memoria). Muovi il cursore:
Il video → una sequenza di fotogrammi
Un video non è nient'altro che tante immagini in fila (i fotogrammi, o frame) mostrate una dopo l'altra molto in fretta: l'occhio le fonde e vede il movimento. Quanti fotogrammi al secondo si chiamano fps (frame per second). Più fps = movimento più fluido.
Guarda i fotogrammi scorrere
Muovi il cursore: a pochi fps il movimento è a scatti, a tanti fps diventa fluido. Il contatore mostra quale fotogramma stai vedendo.
Quanto pesa un video «grezzo»?
Ogni fotogramma è un'immagine (pixel × 3 byte). Moltiplica per gli fps e per i secondi: il numero diventa enorme. Prova:
La compressione → file più piccoli
Comprimere vuol dire scrivere la stessa informazione con meno byte. Ci sono due famiglie: senza perdita (lossless) e con perdita (lossy).
1 · Senza perdita (lossless) — esempio RLE
La compressione lossless sfrutta le ripetizioni: invece di scrivere «🟥🟥🟥🟥🟥» scrive «5×🟥». Si chiama RLE (Run-Length Encoding). Riespandendola si riottiene esattamente l'originale (ZIP, PNG, FLAC funzionano così). Prova a cambiare la riga:
2 · Con perdita (lossy) — la qualità JPG
La compressione lossy butta via i dettagli che l'occhio nota meno, per pesare molto meno (JPG per le foto, MP3 per la musica). Più comprimi, più si vedono i «difetti». Muovi il cursore della qualità: l'immagine viene davvero ri-compressa in JPEG dal tuo browser.