Imagemagick PDF tp JPG плохого качества Переполнение стека

У меня есть большой файл PDF, который составляет около> 100 МБ.

Я хочу сохранить эту страницу PDF за страницей, конвертируя в JPG.

Мой PHP-скрипт работает хорошо, но качество изображения не соответствует даже качеству, установленному на 100. Jpg output max width установлен на 1024.

Каждый размер файла около 2,5 МБ. Я искал эту проблему, но я получаю каждый раз о решениях командной строки. Я должен использовать php.

$file = 'e-magazine/1/ebook.pdf';

if($file === null && !file_exists($file)) {
throw new \Exception('FILE NOT EXISTS');
}

$nop = new \Imagick($file);

for($i = 0; $i <= $nop->getnumberimages(); $i++) {
$image_file = 'e-magazine/1/'.($i+1).'.jpg';

$im = new \Imagick();

$im->readimage($file.'['.$i.']');
$im->setImageCompressionQuality(100);
$im->setimageformat('jpeg');
$im->resizeImage(1024, 0, \Imagick::FILTER_CATROM, 1);
$im->writeimage($image_file);

$tm = new \Imagick();
$tm->readimage($image_file);
$tm->setImageCompressionQuality(60);
$tm->setimageformat('jpeg');
$tm->resizeImage(200, 0, \Imagick::FILTER_CATROM, 1);
$tm->writeimage('e-magazine/1/thumbnails/'.($i+1).'_thumb.jpg');
}

Что я могу сделать, чтобы исправить качество файла?

1

Решение

PDF-файлы являются векторными, а не растровыми, поэтому вам необходимо установить плотность перед чтением файла, чтобы сообщить ImageMagick, какой размер вам понадобится, после чего он может соответствующим образом растеризоваться при вводе. Попробуйте следующий ПРИОРИТЕТ, чтобы прочитать изображение:

$im->setResolution(288,288);

Затем попробуйте уменьшить это значение, скажем, до 144, и сравнивать качество, пока качество не станет достаточным. Это компромисс между качеством и временем обработки и потребностью в памяти. Чем выше число, тем выше качество, но тем дольше и больше памяти.

1

Другие решения

Мое полное решение этого с компенсацией за прозрачность альфа-каналов PNG

$im = new imagick();
$im->setResolution(300, 300);
$im->readimage($pdf_path.'_0.pdf[0]');
$im->setImageResolution(300, 300);
$im->setImageBackgroundColor('#ffffff');
$im = $im->flattenImages();
$im->setImageFormat('jpeg');
$im->setImageCompression(imagick::COMPRESSION_JPEG);
$im->setImageCompressionQuality(100);
$im->resizeImage(1200, 0,  imagick::FILTER_LANCZOS, 1);
0

По вопросам рекламы [email protected]