当我使用以下命令将 pdf 文件转换为一堆 jpg 文件时
convert -quality 100 file.pdf page_%04d.jpg
我有明显的质量损失。
但是,如果我执行以下操作,则不会出现(明显的)质量损失:
启动 gscan2pdf,选择文件 -> 导入(然后选择 file.pdf)。然后进入gscan2pdf的临时目录。有许多 pnm 文件(pdf 文件的每一页一个)。现在我做
for file in *.pnm; do
convert $file $file.jpg done
生成的 jpg 文件(大致)与原始 pdf 具有相同的质量(这就是我想要的)。
现在我的问题是,是否有一种简单的命令行方法可以将 pdf 文件转换为一堆 jpg 文件,而不会造成明显的质量损失? (上面的解决方案过于复杂且耗时)。
答案1
目前尚不清楚“质量损失”是什么意思。这可能意味着很多不同的事情。您可以发布一些示例来说明吗?也许从质量差和质量好的版本中剪切出相同的部分(作为 PNG 以避免进一步的质量损失)。
也许您需要使用-density
更高的 dpi 进行转换:
convert -density 300 file.pdf page_%04d.jpg
(如果需要,您可以在前面添加-units PixelsPerInch
或-units PixelsPerCentimeter
。我的副本默认为 ppi。)
更新: 正如您所指出的,gscan2pdf
(您使用它的方式)只是pdfimages
(来自波普勒)。 pdfimages
不会执行convert
与将 PDF 作为输入时相同的操作。
convert
获取 PDF,以某种分辨率渲染它,并使用生成的位图作为源图像。
pdfimages
查看 PDF 中是否有嵌入的位图图像,并将每个图像导出到一个文件中。它只是忽略 PDF 中的任何文本或矢量绘图命令。
因此,如果您拥有的 PDF 只是一系列位图的包装,pdfimages
则可以更好地提取它们,因为它可以为您提供原始大小的原始数据。您可能还想使用 选项-j
,pdfimages
因为 PDF 可以包含原始 JPEG 数据。默认情况下,pdfimages
将所有内容转换为 PNM 格式,并且转换 JPEG > PPM > JPEG 是一个有损过程。
因此,尝试一下
pdfimages -j file.pdf page
您可能需要也可能不需要遵循convert
to.jpg
步骤(取决于 PDF 使用的位图格式)。
我在自己根据 JPEG 图像序列制作的 PDF 上尝试了此命令。提取的 JPEG 与源图像逐字节相同。您无法获得比这更高的质量。
答案2
convert
不适合我。然而,这个 ( pdftoppm
) 工作得很好。以下每个命令都将确保“images”目录存在,如果不存在则创建它,并将生成的图像存储到该目录中。
1200 分辨率
mkdir -p images && pdftoppm -jpeg -r 1200 mypdf.pdf images/pg
600 分辨率
mkdir -p images && pdftoppm -jpeg -r 600 mypdf.pdf images/pg
300 DPI(每页生成约 1MB 大小的文件)
mkdir -p images && pdftoppm -jpeg -r 300 mypdf.pdf images/pg
300 DPI,最小压缩/最高质量(每页生成约 2MB 大小的文件)
mkdir -p images && pdftoppm -jpeg -jpegopt quality=100 -r 300 mypdf.pdf images/pg
补充阅读:
- https://stackoverflow.com/questions/43085889/how-to-convert-a-pdf-into-jpg-with-commandline-in-linux/61700520#61700520
- https://stackoverflow.com/questions/6605006/convert-pdf-to-image-with-high-resolution/58795684#58795684
- https://askubuntu.com/questions/150100/extracting-embedded-images-from-a-pdf/1187844#1187844
答案3
正如学生的回答所说,pdfimages
这是一个不错的选择。根据我的经验,无论您是否指定正确的 dpi,导出的质量都会很差gs
。convert
但是,如果 pdf 每页有多个图层则pdfimages
不起作用,并将图层提取为单独的图像,在这种情况下,最好是使用inskcape
所看到的导出页面。
这是我使用的命令:
pdftk combined_to_do.pdf burst output pg_%04d.pdf
ls ./pg*.pdf | xargs -L1 -I {} inkscape {} -z --export-dpi=300 --export-area-drawing --export-png={}.png
第一个命令分割所有页面,第二个命令逐页转换为 png。您可以保留它们 png 或将它们转换为 jpeg
ls ./p*.png | xargs -L1 -I {} convert {} -quality 100 -density 300 {}.jpg
与pdfimages
、gs
和 ImageMagick相比convert
,我发现inkscape
的导出质量最好。
答案4
查看 gscan2pdf 源代码,我注意到它使用 pdfimages。所以pdfimages file.pdf page
会导致page-001.ppm, page-002.ppm
等等。