¿Por qué las imágenes producidas por pdfimages son diferentes cuando se usa el indicador -all?

¿Por qué las imágenes producidas por pdfimages son diferentes cuando se usa el indicador -all?

Según tengo entendido, pdfimages -allextrae imágenes de archivos PDF en sus formatos nativos.

Por lo tanto, esperaba que las imágenes JPG (con pérdida) extraídas de ese comando tuvieran la misma información de píxeles que los archivos .ppm y .pbm producidos sin la -allopción, así como los archivos PNG (sin pérdida) creados cuando hago clic derecho y guarde la imagen en Evince.

Sin embargo, mi uso del comparecomando ImageMagick me dice que existen diferencias en las imágenes contenidas en los archivos JPG en comparación con las otras opciones anteriores. Para reproducir descargar el PDF en este enlace (https://fccid.io/document.php?id=2149405), úselo como argumento para pdfimagesy pdfimages -ally use el primer archivo .ppm y el primer archivo .jpg como argumentos para compare. Cuando hago esto, produce un archivo de imagen que contiene rojo para indicar una diferencia en las imágenes.

¿Hay algo que no entiendo? ¿Se pdfimagesagrega información de píxeles de forma predeterminada cuando se crean archivos .ppm y .pbm?

Respuesta1

pdfimages -alldevuelve elexactoarchivo que estaba almacenado en el pdf.

Podemos probar esto haciendo un recorrido de ida y vuelta: comenzando con una imagen jpg, la agregamos a un pdf usando LaTeX, la extraemos usando pdfimages -ally luego la comparamos con el original. (La razón para usar LaTeX se explicará más adelante).

Tengo la primera imagen jpg extraída de su enlace y la nombré device.jpg. Pongámoslo en un archivo PDF usando 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.

Ahora, extrajámoslo usando pdfimages -ally comparémoslo con el original:

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

El jpg extraído esbyte por byte idénticoal original.

Nota al pie: la razón para usar LaTeX

La prueba anterior no se puede realizar utilizando cualquier creador de PDF. Esto se debe a que no todos los creadores de PDF colocarán imágenes en un PDF sin ser molestados. Por ejemplo, probemos el de 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

convertVolví a muestrear la imagen a un tamaño más pequeño antes de colocarla en el pdf.

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

La precisión de la imagen era parte de los objetivos de diseño de pdflatex. Otro software de creación de PDF puede, de forma predeterminada, "optimizar" las imágenes antes de colocarlas en el PDF.

Actualizar: ShreevatsaRseñala que elimg2pdfLa utilidad también proporciona un método sin pérdidas para convertir imágenes a PDF. Los usuarios que no usan TeX probablemente también lo encontrarán mucho más sencillo de usar.

información relacionada