Intereting Posts
Загрузите и прочитайте файл csv с помощью php Радиус статической карты Google для увеличения mysql: показать дату из даты и времени PHP и PDO: подключение к MySQL с использованием адреса IPv6 Логический режим, где запрос соответствия с динамическим значением, используя PHP MySQLi Подготовленные заявления Не удалось создать xdebug php синтаксическая ошибка, неожиданный T_VARIABLE, ожидающий ',' или ';' on line 29 Неустранимая ошибка: допустимый размер памяти 67108864 байт исчерпан (пытался выделить 122880 байт) Как получить доступ к атрибуту объекта PHP, имеющему знак доллара? Как добавить txt-файл и создать ZIP в php Почему PHP в Windows не видит расширение php_intl.dll, даже если оно существует? Удаление полей из excel с использованием phpexcel после запроса MYSQL Переключение языков на веб-сайт с помощью PHP Как увеличить имя файла в php для предотвращения дублирования OpenSSL «Печать» в C (или через оболочку)

Конвертация PDF в PNG или JPEG очень медленная, используя ImageMagick

У меня есть рабочий сценарий преобразования 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 (и вы можете не знать об этом). См. Также этот ответ для некоторых подробностей об этом.