我有一个使用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更快,我很乐意接受它。
答案 0 :(得分:7)
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
设置。但是,-quality
用于JPEG和-quality
用于PNG输出与ImageMagick具有完全不同的含义(您可能没有意识到它)。有关此问题的详细信息,另请参阅this answer。