為什麼使用 -all 標誌時 pdfimages 產生的圖像不同?

為什麼使用 -all 標誌時 pdfimages 產生的圖像不同?

據我了解,pdfimages -all從 PDF 中提取原始格式的圖像。

因此,我預計從該命令提取的 JPG(有損)圖像將具有與不使用該選項生成的 .ppm 和 .pbm 文件-all以及右鍵單擊和創建時創建的 PNG(無損)文件相同的像素資訊。圖像保存在Evince 中。

但是,我對 ImageMagickcompare命令的使用告訴我,與上述其他選項相比,JPG 檔案中包含的圖像存在差異。要複製,請下載此連結中的 PDF(https://fccid.io/document.php?id=2149405),將其用作pdfimagesand的參數pdfimages -all,並使用第一個 .ppm 檔案和第一個 .jpg 檔案作為 的參數compare。當我這樣做時,它會產生一個包含紅色的圖像文件,以指示圖像中的差異。

有什麼我不明白的嗎?pdfimages建立.ppm和.pbm檔案時是否預設新增像素資訊?

答案1

pdfimages -all返回精確的儲存在pdf中的文件。

我們可以透過進行往返測試:從 jpg 圖像開始,使用 LaTeX 將其添加到 pdf 中,使用 提取它pdfimages -all,然後將其與原始圖像進行比較。 (後面會解釋使用LaTeX的原因。)

我有從您的連結中提取的第一個 jpg 圖像,並將其命名為device.jpg.讓我們使用 LaTeX 將其放入 PDF 文件中:

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

現在,讓我們使用它來提取它pdfimages -all並與原始版本進行比較:

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

提取出來的jpg是逐位元組相同到原來的。

註腳:使用LaTeX的原因

僅使用任何 PDF 建立器都無法完成上述測試。這是因為並非所有 PDF 創作者都會將影像不受干擾地放入 PDF 中。例如,讓我們嘗試一下 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在將影像放入 pdf 之前,將影像重新取樣為較小的尺寸。

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

影像準確度是 pdflatex 設計目標的一部分。預設情況下,其他 PDF 建立軟體可能會在將影像放入 PDF 之前對其進行「最佳化」。

更新: 什里瓦察爾指出圖像2pdf該實用程式還提供了一種將圖像轉換為 PDF 的無損方法。非 TeX 用戶也可能會發現它使用起來更簡單。

相關內容