pdf 到 jpg 没有质量损失;gscan2pdf

stu*_*ent 65 command-line pdf imagemagick image-manipulation conversion

当我使用将 pdf 文件转换为一堆 jpg 文件时

convert -quality 100 file.pdf page_%04d.jpg
Run Code Online (Sandbox Code Playgroud)

我有明显的质量损失。

但是,如果我执行以下操作,则没有(明显的)质量损失:

启动gscan2pdf,选择file-> import(并选择file.pdf)。然后进入gscan2pdf的临时目录。有许多 pnm 文件(pdf 文件的每一页一个)。现在我做

  for file in *.pnm; do            
  convert $file $file.jpg done
Run Code Online (Sandbox Code Playgroud)

生成的 jpg 文件(大致)与原始 pdf 的质量相同(这是我想要的)。

现在我的问题是,是否有一种简单的命令行方法可以将 pdf 文件转换为一堆 jpg 文件而不会造成明显的质量损失?(上面的解决方案过于复杂和耗时)。

cjm*_*cjm 114

不清楚您所说的“质量损失”是什么意思。这可能意味着很多不同的事情。你能贴一些样本来说明吗?也许从质量差和质量好的版本中删除相同的部分(作为 PNG 以避免进一步的质量损失)。

也许您需要使用-density以更高的 dpi 进行转换:

convert -density 300 file.pdf page_%04d.jpg
Run Code Online (Sandbox Code Playgroud)

(您可以预先添加-units PixelsPerInch-units PixelsPerCentimeter在必要时。我的副本默认为 ppi。)

更新: 正如您所指出的,gscan2pdf(您使用它的方式)只是pdfimages(来自poppler的包装器)。 pdfimages不会做与convert给定 PDF 作为输入时相同的事情。

convert 获取 PDF,以某种分辨率呈现它,并将生成的位图用作源图像。

pdfimages查看嵌入位图图像的 PDF 并将每个图像导出到一个文件。它只是忽略 PDF 中的任何文本或矢量绘图命令。

因此,如果您拥有的 PDF 只是一系列位图的包装器,pdfimages那么在提取它们时会做得更好,因为它会为您提供原始大小的原始数据。您可能还想使用-j选项pdfimages,因为 PDF 可以包含原始 JPEG 数据。默认情况下,pdfimages将所有内容转换为 PNM 格式,并且转换 JPEG > PPM > JPEG 是一个有损过程。

所以,试试

pdfimages -j file.pdf page
Run Code Online (Sandbox Code Playgroud)

您可能需要也可能不需要使用convertto.jpg步骤(取决于 PDF 使用的位图格式)。

我在用一系列 JPEG 图像制作的 PDF 上尝试了这个命令。提取的 JPEG 与源图像逐字节相同。你无法获得比这更高的质量。


Gab*_*les 8

convert对我不起作用pdftoppm然而,这个 ( ) 工作得很好。下面的每个命令都将确保存在一个“图像”目录,如果没有则创建它,并将生成的图像存储到该目录中。

1200 DPI

mkdir -p images && pdftoppm -jpeg -r 1200 mypdf.pdf images/pg
Run Code Online (Sandbox Code Playgroud)

600 DPI

mkdir -p images && pdftoppm -jpeg -r 600 mypdf.pdf images/pg
Run Code Online (Sandbox Code Playgroud)

300 DPI(每页生成约 1MB 大小的文件)

mkdir -p images && pdftoppm -jpeg -r 300 mypdf.pdf images/pg
Run Code Online (Sandbox Code Playgroud)

300 DPI,最低压缩/最高质量(每页生成约 2MB 大小的文件)

mkdir -p images && pdftoppm -jpeg -jpegopt quality=100 -r 300 mypdf.pdf images/pg
Run Code Online (Sandbox Code Playgroud)

补充阅读:

  1. /sf/ask/3016012261/#61700520
  2. /sf/ask/462350451/#58795684
  3. https://askubuntu.com/questions/150100/extracting-embedded-images-from-a-pdf/1187844#1187844


Edu*_*scu 6

正如学生的回答所说,这pdfimages是一个不错的选择。根据我的经验gsconvert无论您是否指定了正确的 dpi,都会导出质量差。

但是如果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
Run Code Online (Sandbox Code Playgroud)

第一个命令拆分所有页面,第二个命令将页面逐页转换为 png。您可以将它们保留为 png 或将它们转换为 jpeg

ls ./p*.png | xargs -L1 -I {} convert {}  -quality 100 -density 300 {}.jpg
Run Code Online (Sandbox Code Playgroud)

与、 和 ImageMagick相比pdfimages,我发现的导出质量最好。gsconvertinkscape