我目前正在使用ImageMagick转换PDF到JPEG光栅图像。这是痛苦的缓慢和消耗了大量的记忆。
我使用的命令是:
convert -geometry 1024x768 -density 200 -colorspace RGB foo.pdf bar%02d.jpg
我想这很慢,因为它使用了Ghostscript。但是,在Linux机器上必须有更快的方法来做到这一点。
有人找到更好的解决办法了吗?
发布于 2010-08-05 23:06:37
直接使用Ghostscript (而不是使用ImageMagick的convert
命令间接调用Ghostscript )确实更快。它让你对转换参数有更多的控制。试一试
gs \
-sDEVICE=jpeg \
-o bar_%03d.jpg \
-dJPEGQ=95 \
-r600x600 \
-g4960x7016 \
foo.pdf
哪里
-o
:确定输出path+filename (并保存-dBATCH -dNOPAUSE
的使用)-dJPEGQ
:将JPEG质量设置为95%-r
:将分辨率设置为600 sets-g
:将图像大小设置为4960x7016px-sDEVICE
:将输出设置为JPEG对于您来说,这个命令可能仍然要慢下来,并创建比预期更大的文件。为了获得更小的文件大小和更快的执行速度,请尝试这样做(这很可能接近convert
命令行的输出质量):
gs \
-sDEVICE=jpeg \
-o bar_%03d_200dpi_q80.jpg \
-dJPEGQ=80 \
-r200x200 \
-g1653x2339 \
foo.pdf
甚至是
gs \
-sDEVICE=jpeg \
-o bar_%03d_default_a4.jpg \
-sPAPERSIZE=a4 \
foo.pdf
(这提供了72 web分辨率,通常对大多数屏幕和大多数web应用程序来说都足够好)。
发布于 2010-09-06 16:14:31
顺便说一下,ImageMagick速度慢得多的原因之一是它两次调用Ghostscript。它不会一次转换PDF => PNG,而是使用两个不同的步骤:
PDF => PostScript
转换;PostScript => PNG
转换。您可以通过键入以下内容来了解ImageMagick的“委托”(ImageMagick使用的外部程序,如Ghostscript)的详细设置
convert -list delegate
(在我的系统中,这是32个不同命令的列表。)现在,要查看将哪些命令转换为PNG,请使用以下命令:
convert -list delegate | grep -i png
好吧,这是给Linux的。如果您在Windows上,请尝试如下:
convert -list delegate | findstr /i png
你会发现IM只从PS或EPS输入产生PNG。那么IM是如何从你的PDF中获得PS的呢?简单:
convert -list delegate | findstr /i PDF
convert -list delegate | grep -i PDF
阿!它使用Ghostscript进行PDF => PS转换,然后再次使用Ghostscript进行PS => PNG转换。可以工作,但如果您知道Ghostscript可以一次执行PDF => PNG,那么这不是最有效的方法。而且更快。质量要好得多。
关于IM通过Ghostscript委托处理PDF到图像的处理,您首先应该知道两件事:
-density 600
作为convert
参数,该参数告诉Ghostscript使用600 dpi分辨率的图像输出。PDF => PS
和PS => PNG
是一个真正的错误。因为你从来没有赢过,而且在第一步就保持质量,但往往会失去一些质量。原因:PS => PDF
,因此没有那么关键.)这就是为什么我建议您一次转换您的PDF到PNG (或JPEG)直接使用Ghostscript。并使用Ghostscript的最新版本8.71 (即将发布: 9.00) .
发布于 2013-06-14 17:04:36
poppler中的pdftoppm
程序也能够创建JPEG,对我来说,它的速度大约是上面描述的使用gs
的两倍:
pdftoppm -jpeg -r 300 foo.pdf foo.jpg
https://serverfault.com/questions/167573
复制相似问题