Я хочу преобразовать PDF-страницу в png-изображение с помощью Imagick.
Я пробовал с PHP, но качество изображения было очень низким.
Когда я попытался с командной строкой, результат был идеальным.
PHP-код
$im = new imagick( __DIR__ . DIRECTORY_SEPARATOR.$PDFName.'['.$i.']' ); $params = $im->identifyImage(); $width = $params['geometry']['width']*1; $height = $params['geometry']['height']*1; $im->setResolution(400,400); $im->resizeImage($width ,$height, imagick::FILTER_SINC, 1, true); $im->writeImage(__DIR__ . DIRECTORY_SEPARATOR.'pdf_pages\\'.$i.'.png'); $im->clear(); $im->destroy();
Код командной строки
convert -density 400 a.pdf -resize 25% -a.png
PHP-код (вторая попытка)
$im = new imagick( __DIR__ . DIRECTORY_SEPARATOR.$PDFName.'['.$i.']' ); $im->setOption('density','400x400'); $im->setOption('resize','25%'); $im->writeImage(__DIR__ . DIRECTORY_SEPARATOR.'pdf_pages\\'.$i.'.png'); $im->clear(); $im->destroy();
Все еще плохие результаты.
Что я могу сделать? Я хочу использовать параметр плотности в моем PHP-коде, но как?
Выход с PHP
Выход с командной строкой
Перед чтением файла вам необходимо установить разрешение.
$im = new imagick(); $im->setResolution(200,200); $im->readImage(__DIR__ . DIRECTORY_SEPARATOR.$PDFName.'['.$i.']');
Тогда результат будет совершенным.
Надеюсь, это поможет кому-то.
Из руководства http://php.net/manual/en/imagick.setresolution.php
Imagick :: setResolution () необходимо вызвать перед загрузкой или созданием изображения.
См. Этот ответ Pdf для изображения с использованием php-imagick api