come funziona la compressione dei pdf
Come funziona davvero la compressione dei PDF
«Comprimi PDF» esegue diverse operazioni scollegate dietro un solo pulsante. Una di esse è senza perdita e di solito è già stata fatta. Una di esse è da dove viene tutta la dimensione, e non è gratis.
01
Strato uno: la compressione dei flussi, senza perdita e già attiva
Ogni flusso in un PDF — flussi di contenuto, font incorporati, dati d'immagine — può portare un filtro che dice come è codificato. Quello comune è `FlateDecode`, cioè deflate, lo stesso algoritmo dello ZIP. Le istruzioni di disegno del testo sono molto ripetitive, quindi deflate se la cava benissimo: una pagina di comandi di disegno si comprime abitualmente a un quinto della sua dimensione.
La parte importante è che quasi ogni scrittore di PDF applica questo nel momento in cui salva. Quando il file arriva a te, questo strato ha già lavorato. È per questo che comprimere in zip un PDF non fa guadagnare quasi nulla, e perché comprimere un PDF di solo testo già piccolo restituisce un file della stessa dimensione. Non era rimasto niente da togliere.
Il PDF 1.5 ha aggiunto due raffinamenti che aiutano ancora sui file più vecchi. I flussi di oggetti impacchettano molti piccoli dizionari in un unico flusso comprimibile invece di lasciarli come testo sciolto non compresso. I flussi di riferimenti incrociati fanno lo stesso con l'indice. Su un documento grande con decine di migliaia di oggetti, già solo quello può essere una riduzione sensibile, e non costa assolutamente nulla.
02
Strato due: la ricodifica delle immagini, dove sta la dimensione
Deflate è inutile sulle fotografie. Una scansione non ha ripetizioni esatte da sfruttare — ogni pixel differisce leggermente dal vicino — quindi la compressione senza perdita sui dati d'immagine restituisce quasi nulla. I dati d'immagine sono invece conservati con `DCTDecode` (JPEG) o, per le scansioni a due livelli, con `CCITTFaxDecode` o `JBIG2Decode`.
Quindi comprimere un PDF pesante di immagini significa una cosa sola: decodificare ogni immagine, cambiarla e ricodificarla. Ci sono tre leve, e ognuna è un compromesso reale.
- Ricampionamento
- Ridurre le dimensioni in pixel. Una scansione a 300 DPI contiene quattro volte i dati di una a 150 DPI, e uno schermo non mostra la differenza. È il guadagno singolo più grande sui documenti scansionati.
- Qualità di ricodifica
- Alzare la quantizzazione JPEG. Passare da qualità 95 a 80 di solito dimezza i dati ed è difficile da vedere; scendere sotto 60 comincia a mostrare aloni intorno al testo.
- Riduzione del colore
- Convertire il colore in scala di grigi, o una scansione in scala di grigi di testo pulito a due livelli. Il nero su carta bianca non porta colore che valga la pena conservare.
- Cosa costa
- Tutte e tre sono a senso unico. I pixel scartati non ci sono più, e comprimere di nuovo il risultato ricodifica dati già degradati.
03
Strato tre: buttare via cose che non stavi guardando
Una quota sorprendente di un PDF è spesso zavorra che nessuno vuole. I font sono il caso classico: un font incorporato per intero può arrivare a qualche centinaio di kilobyte, e un documento che ne usa undici caratteri in un titolo si porta dietro l'intero carattere tipografico. Creare un sottoinsieme riscrive il font perché contenga solo i glifi effettivamente disegnati.
Poi c'è la duplicazione. Un logo messo nell'intestazione di ogni pagina viene spesso incorporato una volta per pagina invece di essere conservato una volta e richiamato ottanta volte. Deduplicare oggetti identici su una relazione lunga può togliere un terzo del file senza alcun cambiamento visivo.
Il resto è più piccolo ma si somma: miniature di pagina memorizzate dallo scrittore, blocchi di metadati XMP, oggetti inutilizzati rimasti orfani da modifiche precedenti, JavaScript e l'intera cronologia delle modifiche lasciata dai salvataggi incrementali. Niente di tutto ciò si visualizza. Tutto viaggia.
04
Perché la stessa impostazione dà risultati tanto diversi
Perché l'esito dipende interamente da quale strato abbia qualcosa da fare. Passa un compressore su una scansione da 40 MB e ricodificherà 200 immagini restituendoti 4 MB. Passa le stesse identiche impostazioni su una relazione di testo da 400 KB e non troverà immagini, né font senza sottoinsieme, né oggetti duplicati, e ti restituirà 390 KB.
Nessuno dei due risultati è lo strumento che funziona bene o male. È la stessa operazione che incontra due file completamente diversi, ed è per questo che la prima domanda utile è sempre di cosa è fatto il file, non con quanta forza spremerlo.
05
Perdita di generazione, e perché due volte non è due volte meglio
La quantizzazione JPEG non è idempotente. Ricodificare un'immagine già quantizzata riquantizza coefficienti che erano già stati arrotondati, quindi l'errore si accumula mentre la dimensione si muove appena. La seconda passata di solito toglie qualche punto percentuale e aggiunge artefatti visibili intorno a ogni bordo netto.
Se una passata non ha raggiunto il tuo obiettivo, la mossa produttiva è cambiare qualcosa di strutturale — ricampionare di più, scendere alla scala di grigi, togliere pagine — anziché rilanciare la stessa compressione.