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 会更快,我很乐意这样做。

4

1 回答 1

8

ImageMagick 本身根本无法将 PDF 转换为光栅图像。

ImageMagick 使用委托来完成这项工作:该委托是Ghostscript。如果您没有在与 ImageMagick 相同的系统上安装 Ghostscript,则 PDF 转换convert将不起作用。

为了提高速度,不要使用 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 

Also please note: You used a -quality 60 setting for your PNG outputting command. But -quality for JPEG and -quality for PNG output do have a completely different meaning with ImageMagick (and you may not be aware of it). See also this answer for some details about this.

于 2012-09-24T21:53:05.500 回答