web-dev-qa-db-fra.com

Pourquoi les images produites par pdfimages sont-elles différentes lorsque vous utilisez le drapeau -all?

Si je comprends bien, pdfimages -all extrait les images des fichiers PDF dans leur format natif.

Par conséquent, je m'attendais à ce que les images JPG (avec perte) extraites de cette commande aient les mêmes informations de pixel que les fichiers .ppm et .pbm produits sans l'option -all, ainsi que les fichiers PNG (sans perte) créés lors de Je fais un clic droit et enregistre l'image dans Evince.

Cependant, mon utilisation de la commande ImageMagick compare me dit que les images contenues dans les fichiers JPG présentent des différences par rapport aux autres options ci-dessus. Pour reproduire, téléchargez le PDF dans ce lien ( https://fccid.io/document.php?id=2149405 ), utilisez-le comme argument pour pdfimages et pdfimages -all et utilisez le premier fichier .ppm et le premier fichier .jpg comme arguments pour compare. Lorsque je le fais, un fichier image contenant du rouge apparaît pour indiquer une différence entre les images.

Y a-t-il quelque chose que je ne comprends pas? Est-ce que pdfimages ajoute des informations sur les pixels par défaut lorsqu'il crée des fichiers .ppm et .pbm?

5
Orion751

pdfimages -all renvoie le fichier exact qui a été stocké dans le fichier pdf.

Nous pouvons le tester en effectuant un aller-retour: à partir d’une image jpg, nous l’ajoutons à un fichier PDF à l’aide de LaTeX, nous l’extrayons à l’aide de pdfimages -all, puis nous le comparons à l’original. (La raison d'utiliser LaTeX sera expliquée plus tard.)

J'ai la première image jpg extraite de votre lien et je l'ai nommée device.jpg. Mettons cela dans un fichier PDF en utilisant LaTeX:

$ cat img.tex 
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\includegraphics[width=5in,keepaspectratio]{device}
\end{document}
$ pdflatex img
[...snip...]
Output written on img.pdf (1 page, 672455 bytes).
Transcript written on img.log.

Extrayons-le à l’aide de pdfimages -all et comparons-le avec l’original:

$ pdfimages -all img.pdf img-all
$ cmp device.jpg img-all-000.jpg 
$

Le jpg extrait est octet pour octet identique à l'original.

Note de bas de page: la raison d'utiliser LaTeX

Le test ci-dessus ne peut pas être effectué avec n'importe quel créateur PDF. En effet, tous les PDF créateurs ne placeront pas les images dans un PDF non altéré. Par exemple, essayons convert:

$ convert device.jpg device.pdf
$ pdfimages -all device.pdf device-all
$ cmp device.jpg device-all-000.jpg 
device.jpg device-all-000.jpg differ: byte 4, line 1

convert a ré-échantillonné l'image à une taille plus petite avant de la placer dans le fichier PDF.

$ ls -1s device.jpg device-all-000.jpg 
528 device-all-000.jpg
656 device.jpg

La précision des images faisait partie des objectifs de conception de pdflatex. Un autre logiciel de création PDF peut, par défaut, "optimiser" les images avant de les placer dans le fichier PDF.

6
John1024