PicScrub logoPicScrub
Torna ai formati

Formato GIF

Graphics Interchange Format

Una struttura a blocchi

GIF è uno di quei formati sopravvissuti decenni oltre le previsioni. Creato da CompuServe nel 1987, è ancora dappertutto, soprattutto grazie al supporto per le animazioni.

Il formato usa una struttura a blocchi che, rispetto ai formati moderni, è di una semplicità rinfrescante. Un'intestazione, un paio di descrittori, una tavolozza di colori, i dati dell'immagine e un byte finale che dice "fine".

Struttura di un file GIF

Header
LSD
GCT
Extensions
Image Data
Trailer
Header
6 byte
GIF87a o GIF89a
LSD
7 byte
Logical Screen Descriptor
GCT
768 byte
Tavolozza globale (opzionale)
Extensions
100 byte
Blocchi di estensione (metadati)
Image Data
Lunghezza variabile
Descrittore immagine + dati LZW
Trailer
1 byte
Byte di chiusura 0x3B

Intestazione GIF

Firma GIF
Versione (89a)
Larghezza (640)
Altezza (480)
Campi impacchettati
Indice dello sfondo
Proporzioni dei pixel
OffsetHexASCII
0000
4749463839618002E001F70000
GIF89a.......

Differenze tra le versioni

GIF87a

Specifica originale. Nessun blocco di estensione.

GIF89a

Aggiunge estensioni, animazioni e trasparenza.

I blocchi di estensione

GIF89a (la revisione del 1989) ha introdotto i blocchi di estensione, ed è così che GIF ha ottenuto le animazioni. Tutti i blocchi di estensione iniziano con 0x21, seguito da un byte che ne indica il tipo: sono quindi facili da riconoscere mentre si scorre un file. Alcuni li vogliamo tenere (i tempi dell'animazione), altri li vogliamo rimuovere (i commenti).

Graphic Control Extension (0xF9)

Governa i tempi dell'animazione, la trasparenza e il metodo di smaltimento. Nelle GIF animate precede ogni descrittore immagine. Sempre mantenuto.

21 F9 04 [disposal] [delay] [transparent] 00

Comment Extension (0xFE)

Commenti in testo semplice. Possono contenere qualsiasi cosa, compresi autore, data di creazione, software o note personali. Rimosso da PicScrub.

21 FE [size] [comment data...] 00

Application Extension (0xFF)

Dati specifici di un'applicazione. Il più importante è NETSCAPE2.0, che governa la ripetizione dell'animazione. Può contenere anche metadati XMP.

21 FF 0B [app identifier] [auth code] [data...] 00

Plain Text Extension (0x01)

Usato raramente. Disegna del testo usando la tavolozza della GIF. I programmi moderni lo ignorano quasi sempre.

Le estensioni applicative

NETSCAPE2.0:ripetizione dell'animazione

Stabilisce quante volte si ripete una GIF animata. Il valore 0 significa ripetizione infinita.

Inizio dell'estensione
Dimensione del blocco (11)
NETSCAPE2.0
Dimensione del sotto-blocco
ID del sotto-blocco
Numero di ripetizioni
Byte di chiusura
OffsetHexASCII
0000
21FF0B4E45545343415045322E300301000000
!..NETSCAPE2.0.....

PicScrub mantiene NETSCAPE2.0 per non alterare l'animazione.

XMP Data:Extensible Metadata Platform

Identificatore dell'applicazione: XMP DataXMP. Contiene metadati XMP/RDF completi in formato XML.

PicScrub rimuove le estensioni applicative XMP.

Come restano intatte le animazioni

La parte difficile con le GIF è distinguere i dati dell'animazione (da tenere) dai metadati (da rimuovere). Stanno tutti e due nei blocchi di estensione, quindi non possiamo semplicemente eliminarli tutti.

Mantenuti per l'animazione

  • • Numero di ripetizioni di NETSCAPE2.0
  • • Graphic Control Extension
  • • Tempi dei fotogrammi
  • • Metodi di smaltimento
  • • Indici di trasparenza
  • • Tavolozze locali

Rimossi

  • • Estensioni di commento
  • • Blocchi applicativi XMP
  • • Blocchi applicativi sconosciuti
  • • Estensioni di testo semplice

Come PicScrub elabora le GIF

1

Controllare l'intestazione

Verificare la firma GIF87a o GIF89a

2

Copiare i dati di intestazione

Mantenere invariati LSD e tavolozza globale

3

Filtrare le estensioni

Tenere NETSCAPE2.0 e Graphic Control, rimuovere Comment e XMP

4

Mantenere i dati dell'immagine

Copiare invariati tutti i descrittori immagine, le tavolozze locali e i dati LZW

5

Scrivere il byte finale

Chiudere il file con il byte 0x3B

La compressione LZW

Due parole sui dati immagine delle GIF: usano la compressione LZW, che è rimasta brevettata fino al 2004 (con tutte le polemiche che ne sono seguite negli anni Novanta). PicScrub non tocca affatto i dati compressi: li copia byte per byte, quindi la qualità non cala di nulla.

Perché è importante

Mantenendo i dati LZW originali, PicScrub garantisce:

  • • Nessuna perdita di qualità (immagine identica bit per bit)
  • • Elaborazione veloce (nessun ciclo di decodifica e ricodifica)
  • • Stessa dimensione per i dati dell'immagine

I limiti dei metadati nelle GIF

La buona notizia sulle GIF è che il formato è precedente allo standard EXIF, quindi non ci sono coordinate GPS o dati della fotocamera di cui preoccuparsi. I problemi di metadati sono più banali.

Che cosa può sfuggire

Per la privacy, le GIF sono un problema piuttosto ridotto rispetto ai JPEG:

  • • Estensioni di commento (a volte con note dell'autore)
  • • Metadati XMP (rari, ma possibili)
  • • Il software identificato nei blocchi applicativi