
Según tengo entendido, pdfimages -all
extrae 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 -all
opció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 compare
comando 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 pdfimages
y pdfimages -all
y 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 pdfimages
agrega información de píxeles de forma predeterminada cuando se crean archivos .ppm y .pbm?
Respuesta1
pdfimages -all
devuelve 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 -all
y 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 -all
y 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
convert
Volví 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.