comment fonctionne la compression pdf
Comment fonctionne vraiment la compression des PDF
« Compresser le PDF » exécute plusieurs opérations sans rapport derrière un seul bouton. L'une d'elles est sans perte et a d'ordinaire déjà été faite. L'une d'elles est d'où vient tout le poids, et elle n'est pas gratuite.
01
Couche un : la compression des flux, sans perte et déjà active
Chaque flux d'un PDF — flux de contenu, polices embarquées, données d'image — peut porter un filtre qui dit comment il est encodé. Le courant est `FlateDecode`, c'est-à-dire deflate, le même algorithme que le ZIP. Les instructions de dessin du texte sont très répétitives, alors deflate s'y comporte très bien : une page de commandes de dessin se comprime couramment au cinquième de sa taille.
Le point important, c'est que presque tout rédacteur de PDF applique cela au moment où il enregistre. Quand le fichier vous parvient, cette couche a déjà tourné. C'est pourquoi zipper un PDF ne rapporte presque rien, et pourquoi compresser un PDF de texte déjà petit vous rend un fichier de la même taille. Il ne restait rien à prendre.
Le PDF 1.5 a ajouté deux raffinements qui aident encore sur les fichiers antérieurs. Les flux d'objets empaquettent de nombreux petits dictionnaires dans un unique flux compressible au lieu de les laisser en texte non compressé épars. Les flux de références croisées font de même pour l'index. Sur un gros document comptant des dizaines de milliers d'objets, cela seul peut être une réduction notable, et cela ne coûte absolument rien.
02
Couche deux : le réencodage des images, où habite le poids
Deflate est inutile sur les photographies. Un scan n'offre aucune répétition exacte à exploiter — chaque pixel diffère légèrement de son voisin — si bien que la compression sans perte sur des données d'image ne rend presque rien. Les données d'image sont plutôt stockées avec `DCTDecode` (JPEG) ou, pour les scans bitonaux, avec `CCITTFaxDecode` ou `JBIG2Decode`.
Compresser un PDF chargé d'images signifie donc une seule chose : décoder chaque image, la modifier et la réencoder. Il y a trois leviers, et chacun est un vrai compromis.
- Rééchantillonnage
- Réduire les dimensions en pixels. Un scan à 300 PPP contient quatre fois les données d'un scan à 150 PPP, et un écran ne montre pas la différence. C'est le plus gros gain unitaire sur les documents scannés.
- Qualité de réencodage
- Augmenter la quantification JPEG. Passer de la qualité 95 à 80 divise en général les données par deux et se voit difficilement ; descendre sous 60 commence à faire apparaître des halos autour du texte.
- Réduction de couleur
- Convertir la couleur en niveaux de gris, ou un scan en niveaux de gris de texte propre en bitonal. Du noir sur papier blanc ne porte aucune couleur qui vaille d'être gardée.
- Ce que cela coûte
- Les trois sont à sens unique. Les pixels jetés sont perdus, et recompresser le résultat réencode des données déjà dégradées.
03
Couche trois : jeter des choses que vous ne regardiez pas
Une part surprenante d'un PDF est souvent du superflu dont personne ne veut. Les polices sont le cas d'école : une police entièrement embarquée peut atteindre plusieurs centaines de kilooctets, et un document qui en emploie onze caractères dans un titre transporte tout le caractère. Le sous-ensemble réécrit la police pour ne contenir que les glyphes réellement dessinés.
Ensuite vient la duplication. Un logo placé dans l'en-tête de chaque page est fréquemment embarqué une fois par page au lieu d'être stocké une fois et référencé quatre-vingts fois. Dédoublonner des objets identiques sur un long rapport peut retirer un tiers du fichier sans le moindre changement visuel.
Le reste est plus petit mais s'additionne : vignettes de page mises en cache par le rédacteur, blocs de métadonnées XMP, objets inutilisés laissés orphelins par des modifications antérieures, JavaScript, et tout l'historique d'édition laissé par les enregistrements incrémentaux. Rien de tout cela ne s'affiche. Tout cela voyage.
04
Pourquoi le même réglage donne des résultats si différents
Parce que l'issue dépend entièrement de la couche qui a quelque chose à faire. Passez un compresseur sur un scan de 40 Mo et il réencodera 200 images pour vous rendre 4 Mo. Passez exactement les mêmes réglages sur un rapport texte de 400 Ko et il ne trouvera ni images, ni polices non réduites, ni objets en double, et vous rendra 390 Ko.
Aucun de ces deux résultats n'est l'outil qui marche bien ou mal. C'est la même opération rencontrant deux fichiers entièrement différents, et c'est pourquoi la première question utile est toujours de quoi le fichier est fait, et non avec quelle force le presser.
05
Perte de génération, et pourquoi deux fois ne vaut pas deux fois mieux
La quantification JPEG n'est pas idempotente. Réencoder une image déjà quantifiée requantifie des coefficients déjà arrondis, si bien que l'erreur s'accumule tandis que la taille bouge à peine. La seconde passe retire d'ordinaire quelques pour cent et ajoute des artefacts visibles autour de chaque bord franc.
Si une passe n'a pas atteint votre objectif, le geste productif est de changer quelque chose de structurel — rééchantillonner davantage, passer en niveaux de gris, retirer des pages — plutôt que de relancer la même compression.