使用ImageMagick的PDF到Jpg真的很慢

时间:2013-09-10 18:37:38

标签: php performance imagemagick

我有一个脚本可以使用ImageMagick将 PDF转换为Jpg 。它运作良好,但速度很慢。 12页的文件大约需要1或2分钟才能完成转换。如果我有60页的文件,请求将花费太多时间来回复 由于我不是ImageMagick的专家,我想知道,有更好的方法吗?

代码

$pdf = new imagick();
$pdf->pingImage("filepath/fileName.ext");
$pagesNbr = $pdf->getNumberImages();

for($x=0; $x<$pagesNbr; $x++) {
    $img = new imagick();
    $img->setResolution(200,200);
    $img->readImage('filePath/fileName.ext['. $x .']');
    $img->setImageColorspace(13);
    $img->setResolution(72,72);
    $img->resampleImage(72,72,imagick::FILTER_LANCZOS,1);
    $img->setCompressionQuality(100);
    $img->setImageFormat("jpg");
    $img = $img->flattenImages();
    $img->writeImage('previews/'. $x .'.jpg'); 
    $img->destroy();
}

1 个答案:

答案 0 :(得分:0)

我也不是专家,但我有一些想法,我认为我可以分享。它可能是显而易见的,但你可以越快地消除越多的命令。尝试使用imagick构造加载图像。你需要setResolution,imageColorspace,compressionQuality,ImageFormat和flattenImages(老实说,我不知道,但似乎你可能至少可以跳过其中一些)...你能在其他地方重新采样吗?如果您没有为每个页面创建新对象但只是继续重复使用相同的对象,该怎么办?

根据我的经验,我通过exec命令运行imagemagick有更好的性能。要真正获得最佳性能,您可能会找到专门为此任务量身定制并从shell运行它的程序。您还可以在处理之前研究压缩/调整pdf的大小,以使任何方法运行得更好。

最后一个想法...如果你不能减少转换时间是你如何呈现给用户...通过ajax上传文件并在后台处理它可能使用户可以等待而。也许你可以触发一个弹出窗口,在完成时通知他们或给他们发电子邮件,这样他们就不会等了。

对不起,我没有更多的帮助,但不要打扰GD ......它的速度很慢。