У меня есть рабочий сценарий преобразования PDF в PNG с использованием PHP и ImageMagick, но у меня проблема со скоростью преобразования.
Я знаю, что это работает, потому что с очень маленьким PDF время, потраченное на конвертирование, не так уж и велико, но с файлом размером 250 КБ (все еще не так уж и много) для преобразования требуется более 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 будет быстрее, я с удовольствием пойду с этим.
ImageMagick не может конвертировать PDF в растровые изображения сам по себе.
ImageMagick использует делегат для этого задания: этот делегат является Ghostscript . Если вы не установили Ghostscript в той же системе, что и ImageMagick, конвертация 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
Также обратите внимание: вы использовали параметр -quality 60
для команды вывода PNG. Но -quality
для JPEG и -quality
для вывода PNG имеют совершенно иное значение с ImageMagick (и вы можете не знать об этом). См. Также этот ответ для некоторых подробностей об этом.