0

我有一个使用 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();
}
4

1 回答 1

0

我也不是专家,但我有一些想法可以分享。它可能很明显,但是您可以摆脱的命令越多,它运行的速度就越快。尝试使用 imagick 结构加载图像。您是否需要 setResolution、imageColorspace、compressionQuality、ImageFormat 和 flattenImages(老实说我不知道​​,但似乎您至少可以跳过其中一些)...您可以在其他地方重新采样吗?如果您不为每个页面创建一个新对象,而是继续重复使用同一个对象怎么办?

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

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

抱歉,我帮不上忙,但不要打扰 GD ......它的速度很慢。

于 2013-09-10T19:08:04.000 回答