使用ImageMagick将PDF转换为PNG或JPEG非常慢

3
我有一个使用PHP和ImageMagick的可行的PDF转换为PNG脚本,但我在转换速度上遇到了问题。
我知道它可以工作,因为对于一个非常小的PDF文件,转换所需时间并不是很长,但对于一个250kb的文件(实际上并不算大),转换需要超过20分钟的时间。
这是PHP代码:
//***** GET PATH TO IMAGEMAGICK *****
$path_to_imagemagick = trim(`which convert`);

//***** PATH TO PDF TO CONVERT *****
$path_to_pdf = getcwd() . "/pdf/myfile.pdf[0]";

//***** PATH TO OUTPUT TO *****
$output_path = getcwd() . "/pdfimage/test_converted.png";

@exec($path_to_imagemagick . " -density 72 -quality 60 -resize 150x " . $path_to_pdf . " " . $output_path);

有没有可以改变的设置来加快这个过程?

如果有帮助的话,图片不一定非得是PNG格式。如果JPEG格式更快,我很乐意采用。


命令行转换的速度是多少?所有250kb的PDF文件需要20分钟吗,还是只有一个特定的PDF?这个PDF包含多少页? - Kurt Pfeifle
经过调查,似乎只有某些PDF文件会出现问题。一些较大的文件可以在几秒钟内完成转换,而一些较小的文件则会超时。是否存在某些PDF设置会导致ImageMagick无法处理? - Tom
有许多PDF文件可能会使大部分甚至全部的PDF查看器、渲染器或解释器难以处理... 其中一个臭名昭著的特性是使用透明度和/或投影阴影的页面区域,可能会导致解释缓慢。-- 此外,正如我在答案中解释的那样,处理PDF -> 图像转换的不是ImageMagick而是Ghostscript。较新版本的Ghostscript往往更好地处理更现代的PDF(例如由Adobe CS6、Acrobat X或InDesign 5创建的PDF等)。-- 您使用的Ghostscript版本是哪个?(输出为:gs -v - Kurt Pfeifle
如果您可以提供(链接到)渲染缓慢的250kb PDF示例,我可以进行详细分析。 - Kurt Pfeifle
1个回答

8

ImageMagick无法自行将PDF转换为光栅图像

ImageMagick使用一个代理来完成此任务:该代理是Ghostscript。如果您没有在与ImageMagick相同的系统上安装Ghostscript,则convert进行的PDF转换将无法正常工作。

为了提高速度,请不要使用ImageMagick进行PDF -> 光栅图像转换。相反,直接使用Ghostscript(也可以通过PHP实现)。

JPEG输出的命令行:

gs                                 \
  -o ./pdfimage/test_converted.jpg \
  -sDEVICE=jpeg                    \
  -dJPEGQ=60                       \
  -r72                             \
  -dLastPage=1                     \
   pdf/myfile.pdf

PNG输出的命令行:

gs                                 \
  -o ./pdfimage/test_converted.png \
  -sDEVICE=pngalpha                \
  -dLastPage=1                     \
  -r72                             \
   pdf/myfile.pdf 

这两个命令都将给您提供未经缩放的输出。

要将输出缩小,您可以使用类似于

gs                                 \
  -o ./pdfimage/test_converted.png \
  -sDEVICE=pngalpha                \
  -dLastPage=1                     \
  -r72                             \
  -dDEVICEWIDTHPOINTS=150          \
  -dDEVICEHEIGHTPOINTS=150         \
  -dPDFFitPage                     \
   pdf/myfile.pdf 

另外请注意: 你在输出PNG的命令中使用了-quality 60参数。但是,对于ImageMagick来说,JPEG的-quality和PNG的-quality有完全不同的含义(可能你并不知道)。请参阅这个答案以获取有关此问题的一些详细信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接