pdf到jpg且无质量损失;gscan2pdf


51

当我使用以下方式将pdf文件转换为一堆jpg文件时

convert -quality 100 file.pdf page_%04d.jpg

我有明显的质量损失。

但是,如果执行以下操作,则不会(明显)损失质量:

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

  for file in *.pnm; do            
  convert $file $file.jpg done

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

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


您的问题尚不清楚的是,您是在谈论pdf中的文本和矢量图形,还是要提取嵌入式图像。
asoundmove 2011年

Answers:


92

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

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

convert -density 300 file.pdf page_%04d.jpg

(您可以添加前缀-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

您可能会或可能不会需要遵循与convert.jpg步骤(取决于PDF是用什么位图格式)。

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


+1我感到很高兴,我没有屈从于误读误读您的其中一个受我启发的句子,并尝试了pdfimages -这可能是我几个月来使用的最有用的程序!我鼓励大家尝试一下!
ixtmixilix 2012年

@ixtmixilix,我很好奇。您误读了什么,怎么读?
cjm 2012年

太棒了!解决了我的一天。谢谢!
Geppettvs D'Constanzo 2012年

convert对于大型PDF也是不切实际的。例如,处理一本700页6兆像素页面的书需要45 GB内存。它花费的时间也比大约长一千倍pdfimages
卡米尔·古德塞内

对于另一种方法,将图像转换为pdf,或者更好地将图像包装为pdf,使用img2pdf,在这里:gitlab.mister-muffin.de/josch/img2pdf(将jpg和jpg2000包装为pdf)。
erik

4

正如学生的回答所说,这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

第一条命令拆分所有页面,第二条命令将一页一页地转换为png。您可以将其保留为png或仅将其转换为jpeg

ls ./p*.png | xargs -L1 -I {} convert {}  -quality 100 -density 300 {}.jpg

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


3

@cjm的响应是正确的,但是如果您喜欢GUI并且不想渲染所有pdf页面,只是为了获得一些图像,请使用gimp。

用gimp打开pdf文件,您将获得一个包含所有页面的导入窗口。选择所需的任何页面,并将分辨率设置为600 pix / inch(在很多情况下,我发现300的锐度太大)。使用“文件/导出”保存为所需的格式

无论如何,必须有一个标志才能从命令行中选择所需的页面。


2

查看gscan2pdf源代码,我注意到它使用pdfimages。因此pdfimages file.pdf page将导致page-001.ppm, page-002.ppm等。


pdfimages确实起到了作用
Eduard Florinescu

2

您的问题尚不清楚的是,您是在谈论pdf中的文本和矢量图形,还是在pdf中包含嵌入式图像。

阅读完gscan2pdf的内容后,我猜您的pdf文件包含(仅)嵌入式图形。

convert本质上“打印”您的pdf,而不考虑内容是什么。就像@cjm所建议的那样,您可能想要更改打印浓度。这是提高矢量图形质量的唯一方法。

如果相反,您要提取的是嵌入式图像(就像gscan2pdf似乎所做的那样),则猜测密度通常会导致质量下降或质量超出要求(以及浪费磁盘空间)。答案是提取图像而不是打印pdf。请参阅这篇文章该文章主要提倡使用pdfimages来提取图像而不会降低质量。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.