Vai al contenuto
PDFLove

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.

Domande

Domande collegate

La compressione dei PDF è senza perdita o con perdita?

Entrambe, nello stesso file. Testo, grafica vettoriale e font sono compressi senza perdita ed escono identici. Fotografie e scansioni vengono ricodificate e perdono davvero dettaglio. È per questo che comprimere un documento di testo è gratis e comprimere una scansione è un compromesso.

Perché comprimere il mio PDF non ha cambiato quasi nulla?

Perché lo strato senza perdita era già stato applicato quando il file è stato scritto, e non c'erano immagini su cui potesse lavorare lo strato con perdita. Un file quasi interamente di testo è già vicino al minimo che può raggiungere.

Comprimere un PDF riduce la qualità di stampa?

Riduce la risoluzione delle immagini, quindi per un libro fotografico destinato alla stampa sì, visibilmente. Per un documento scansionato destinato a uno schermo o a una stampante d'ufficio, ricampionare da 300 DPI a 150 è di solito indistinguibile. Il testo disegnato come testo resta intatto a qualsiasi impostazione.

Perché il mio PDF unito è più grande dei due file sommati?

Di solito i font. Se entrambi i file incorporano sottoinsiemi dello stesso carattere sotto nomi interni diversi, il file unito porta entrambi i sottoinsiemi, perché nulla può dimostrare con sicurezza che siano intercambiabili. Passare poi una compressione spesso lo recupera.