2014-11-18 2 views
1

У меня есть большой pdf-файл, содержащий около 100 Мб.Imagemagick PDF tp JPG плохое качество PHP

Я хочу сохранить это pdf-страницу, переходя на jpg.

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

Каждый файл размером около 2.5MB. Я искал эту проблему, но каждый раз получаю решения в командной строке. Я должен использовать 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'); 
} 

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

+0

Можете ли вы привести несколько примеров страниц из PDF и вывод вы получаете? – Danack

ответ

1

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

$im->setResolution(288,288); 

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

0

Мое полное решение этой проблемы с компенсацией альфа-каналов прозрачности 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); 
Смежные вопросы