据我了解,pdfimages -all
从 PDF 中提取图像的格式是其原始格式。
因此,我预计从该命令提取的 JPG(有损)图像将具有与没有该-all
选项时生成的 .ppm 和 .pbm 文件相同的像素信息,以及在 Evince 中右键单击并保存图像时创建的 PNG(无损)文件相同的像素信息。
但是,我使用 ImageMagickcompare
命令时发现,JPG 文件中包含的图像与上述其他选项相比存在差异。要重现,请从此链接下载 PDF(https://fccid.io/document.php?id=2149405),将其用作和的参数pdfimages
,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 之前对其进行“优化”。
更新: 什里瓦萨指出img2pdf该实用程序还提供了一种将图像无损转换为 PDF 的方法。非 TeX 用户也可能会发现它使用起来更简单。