
Pelo que entendi, pdfimages -all
extrai imagens de PDFs em seus formatos nativos.
Portanto, eu esperava que as imagens JPG (com perdas) extraídas desse comando tivessem as mesmas informações de pixel que os arquivos .ppm e .pbm produzidos sem a -all
opção, bem como os arquivos PNG (sem perdas) criados quando clico com o botão direito e salve a imagem no Evince.
No entanto, meu uso do compare
comando ImageMagick me diz que existem diferenças nas imagens contidas nos arquivos JPG em comparação com as outras opções acima. Para reproduzir, baixe o PDF neste link (https://fccid.io/document.php?id=2149405), use-o como argumento para pdfimages
e pdfimages -all
e use o primeiro arquivo .ppm e o primeiro arquivo .jpg como argumentos para compare
. Quando faço isso, ele produz um arquivo de imagem contendo vermelho para indicar uma diferença nas imagens.
Existe algo que eu não entendo? A adição de informações de pixel é pdfimages
padrão ao criar arquivos .ppm e .pbm?
Responder1
pdfimages -all
retorna oexatoarquivo que foi armazenado no pdf.
Podemos testar isso fazendo um percurso de ida e volta: começando com uma imagem jpg, adicionamos ela a um pdf usando LaTeX, extraímos usando pdfimages -all
e depois comparamos com o original. (A razão para usar o LaTeX será explicada mais tarde.)
Eu tenho a primeira imagem jpg extraída do seu link e a nomeei device.jpg
. Vamos colocá-lo em um arquivo 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.
Agora, vamos extraí-lo usando pdfimages -all
e compará-lo com o original:
$ pdfimages -all img.pdf img-all
$ cmp device.jpg img-all-000.jpg
$
O jpg extraído ébyte por byte idênticoao original.
Nota de rodapé: a razão para usar LaTeX
O teste acima não pode ser feito usando qualquer criador de PDF. Isso ocorre porque nem todos os criadores de PDF colocam imagens em um PDF sem serem molestados. Por exemplo, vamos tentar o 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
reamostramos a imagem para um tamanho menor antes de colocá-la no pdf.
$ ls -1s device.jpg device-all-000.jpg
528 device-all-000.jpg
656 device.jpg
A precisão da imagem fazia parte dos objetivos de design do pdflatex. Outros softwares de criação de PDF podem, por padrão, “otimizar” as imagens antes de colocá-las no PDF.
Atualizar: ShreevatsaRdestaca que oimg2pdfutilitário também fornece um método sem perdas para converter imagens em PDF. Os usuários que não são do TeX provavelmente também acharão muito mais simples de usar.