Answers:
convert
实际上,直接使用Ghostscript(而不是使用ImageMagick的命令,该命令间接调用Ghostscript)确实更快。并且它使您可以更好地控制转换参数。尝试
gs \
-sDEVICE=jpeg \
-o bar_%03d.jpg \
-dJPEGQ=95 \
-r600x600 \
-g4960x7016 \
foo.pdf
哪里
-o
:确定输出路径和文件名(并保存的使用-dBATCH -dNOPAUSE
)-dJPEGQ
:将JPEG质量设置为95%-r
:将分辨率设置为600dpi-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
(它提供72dpi的分辨率,通常对于大多数屏幕和大多数Web应用程序来说已经足够了)。
顺便说一句,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或EPS输入生成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
,因此不是那么重要。...)这就是为什么我建议您直接使用Ghostscript将PDF一次转换为PNG(或JPEG)的原因。并使用最新版本的Ghostscript 8.71(即将发布:9.00)...
该方案pdftoppm
从poppler的包也能创建JPEG文件,对我来说是约快两倍,使用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更快。