Warum sind die von pdfimages erstellten Bilder bei Verwendung des Flags -all anders?

Warum sind die von pdfimages erstellten Bilder bei Verwendung des Flags -all anders?

Meines Wissens werden pdfimages -allBilder aus PDFs in ihren nativen Formaten extrahiert.

Daher erwartete ich, dass die mit diesem Befehl extrahierten JPG-Bilder (verlustbehaftet) dieselben Pixelinformationen aufweisen würden wie die ohne diese -allOption erstellten PPM- und PBM-Dateien sowie die PNG-Dateien (verlustfrei), die erstellt würden, wenn ich mit der rechten Maustaste klicke und das Bild in Evince speichere.

Meine Verwendung des ImageMagick- compareBefehls zeigt mir jedoch, dass es Unterschiede bei den in den JPG-Dateien enthaltenen Bildern im Vergleich zu den anderen oben genannten Optionen gibt. Zum Reproduzieren laden Sie das PDF unter diesem Link herunter (https://fccid.io/document.php?id=2149405), verwende es als Argument für pdfimagesund pdfimages -allund verwende die erste .ppm-Datei und die erste .jpg-Datei als Argumente für compare. Wenn ich das mache, wird eine Bilddatei erstellt, die Rot enthält, um einen Unterschied in den Bildern anzuzeigen.

Gibt es etwas, das ich nicht verstehe? Werden pdfimagesbeim Erstellen von .ppm- und .pbm-Dateien standardmäßig Pixelinformationen hinzugefügt?

Antwort1

pdfimages -allgibt dengenauDatei, die im PDF gespeichert war.

Wir können dies testen, indem wir einen Roundtrip durchführen: Wir beginnen mit einem JPG-Bild, fügen es mit LaTeX zu einem PDF hinzu, extrahieren es mit pdfimages -allund vergleichen es dann mit dem Original. (Der Grund für die Verwendung von LaTeX wird später erklärt.)

Ich habe das erste JPG-Bild, das ich aus Ihrem Link extrahiert habe, und habe es benannt device.jpg. Lassen Sie uns es mit LaTeX in eine PDF-Datei einfügen:

$ 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.

Extrahieren wir es nun pdfimages -allund vergleichen es mit dem Original:

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

Das extrahierte JPG istByte für Byte identischzum Original.

Fußnote: Der Grund für die Verwendung von LaTeX

Der obige Test kann nicht mit jedem beliebigen PDF-Ersteller durchgeführt werden. Dies liegt daran, dass nicht alle PDF-Ersteller Bilder unbeschadet in ein PDF einfügen. Versuchen wir es beispielsweise mit ImageMagick 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

convertDas Bild wurde vor dem Einfügen in das PDF auf eine kleinere Größe neu abgetastet.

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

Bildgenauigkeit war eines der Designziele von pdflatex. Andere PDF-Erstellungsprogramme „optimieren“ Bilder möglicherweise standardmäßig, bevor sie in das PDF eingefügt werden.

Aktualisieren: ShreevatsaRweist darauf hin, dass dieimg2pdfDas Dienstprogramm bietet auch eine verlustfreie Methode zum Konvertieren von Bildern in PDF. Auch Nicht-TeX-Benutzer werden die Verwendung wahrscheinlich viel einfacher finden.

verwandte Informationen