
Meines Wissens werden pdfimages -all
Bilder 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 -all
Option 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- compare
Befehls 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 pdfimages
und pdfimages -all
und 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 pdfimages
beim Erstellen von .ppm- und .pbm-Dateien standardmäßig Pixelinformationen hinzugefügt?
Antwort1
pdfimages -all
gibt 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 -all
und 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 -all
und 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
convert
Das 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.