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 与源图像逐字节相同。你无法获得比这更高的质量。
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)
正如学生的回答所说,这pdfimages是一个不错的选择。根据我的经验gs,convert无论您是否指定了正确的 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