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

Tom*_*Tom 3 php imagemagick image-conversion

我有一个使用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);
Run Code Online (Sandbox Code Playgroud)

我可以更改任何设置以加快速度吗?

如果有帮助,图像不需要是PNG.如果JPEG更快,我很乐意接受它.

Kur*_*fle 7

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
Run Code Online (Sandbox Code Playgroud)

PNG输出的命令行:

gs                                 \
  -o ./pdfimage/test_converted.png \
  -sDEVICE=pngalpha                \
  -dLastPage=1                     \
  -r72                             \
   pdf/myfile.pdf 
Run Code Online (Sandbox Code Playgroud)

这两个命令都会为您提供未缩放的输出.

要缩小输出,可以使用类似的东西

gs                                 \
  -o ./pdfimage/test_converted.png \
  -sDEVICE=pngalpha                \
  -dLastPage=1                     \
  -r72                             \
  -dDEVICEWIDTHPOINTS=150          \
  -dDEVICEHEIGHTPOINTS=150         \
  -dPDFFitPage                     \
   pdf/myfile.pdf 
Run Code Online (Sandbox Code Playgroud)

另请注意:您使用了-quality 60PNG输出命令的设置.但是-quality对于JPEG和-qualityPNG输出,与ImageMagick有着完全不同的含义(你可能没有意识到它).有关此问题的一些详细信息,请参阅此答案.