我目前使用Imagemagick将PDF转换为JPEG光栅图像。 这是痛苦的缓慢,耗尽了大量的内存。
我使用的命令是:
convert -geometry 1024x768 -density 200 -colorspace RGB foo.pdf bar%02d.jpg
我猜这是慢的,因为它使用ghostscript。 但是在Linux上必须有一个更快的方法来做到这一点。
有没有人find更好的解决scheme?
欢呼垫子
直接使用Ghostscript(而不是使用ImageMagick的间接调用Ghostscript的convert命令)确实更快。 它可以让您更好地控制转换参数。 尝试
gs \ -sDEVICE=jpeg \ -o bar_%03d.jpg \ -dJPEGQ=95 \ -r600x600 \ -g4960x7016 \ foo.pdf
哪里
-o :确定输出path+文件名(并保存-dBATCH -dNOPAUSE ) -dJPEGQ :将JPEG质量设置为95% -r :将分辨率设置为600dpi -g :将图像大小设置为4960x7016px -sDEVICE :将输出设置为JPEG 这个命令可能还是会让你放慢速度,并且创build大于预期的文件。 对于较小的文件大小和更快的执行尝试这(这可能接近你的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
(它可以提供72dpi的分辨率,对于大多数屏幕和大多数networking应用程序而言,通常都足够了)。
顺便说一句,ImageMagick慢得多的原因之一就是两次调用Ghostscript。 它不会一次性转换PDF => PNG,而是使用2个不同的步骤:
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或EPSinput中产生PNG。 那么IM如何从你的PDF中获得(E)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 ,因此不是那么重要….) 这就是为什么我build议你直接使用Ghostscript将你的PDF转换成PNG(或JPEG)。 并使用Ghostscript的最新版本8.71 (即将发布:9.00)…
poppler软件包中的程序pdftoppm也可以创buildJPEG,对于我来说,它大约是上述使用gs两倍。
pdftoppm -jpeg -r 300 foo.pdf foo.jpg
根据我的经验, MuPDF比Ghostscript快很多。 这是一个更新的项目,没有太多的遗憾。 尝试,如果它适合你的用例!
mudraw -w 1024 -h 768 -r 200 -c rgb -o bar%d.png foo.pdf
如果你有一个较老的linux发行版,并且从版本库中安装了mupdf-tools,那么mudraw可能仍然被称为pdfdraw
然后你必须使用例如imagemagick将png转换为jpeg。 但它仍然会比Ghostscript更快。