Конвертируйте PDF в JPEG с помощью PHP и ImageMagick - PullRequest
29 голосов
/ 10 февраля 2012

Я использую небольшой скрипт для конвертации PDF в JPG.Это работает, но качество очень низкое.

Сценарий:

$im = new imagick( 'document.pdf[ 0]' ); 
$im->setImageColorspace(255); 
$im->setResolution(300, 300);
$im->setCompressionQuality(95); 
$im->setImageFormat('jpeg'); 
$im->writeImage('thumb.jpg'); 
$im->clear(); 
$im->destroy();

Еще одна вещь, я хочу сохранить исходный размер PDF, но преобразование обрезает размер JPG.

Ответы [ 5 ]

39 голосов
/ 13 сентября 2012

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

// instantiate Imagick 
$im = new Imagick();

$im->setResolution(300,300);
$im->readimage('document.pdf[0]'); 
$im->setImageFormat('jpeg');    
$im->writeImage('thumb.jpg'); 
$im->clear(); 
$im->destroy();
6 голосов
/ 10 февраля 2012

Качество изображения, полученного из PDF-файла, можно изменить, установив density (то есть DPI) перед чтением в PDF-файле - до ghostscript (gs), что растеризует PDF. Чтобы получить хороший результат, суперсэмплируйте с удвоенной требуемой плотностью и используйте resample, чтобы вернуться к желаемому DPI. Не забудьте изменить colorspace на RGB, если вы хотите RGB JPEG.

Типичная версия командной строки для convert может быть:

convert -density 600 document.pdf[0] -colorspace RGB -resample 300 output.jpg

Если вам нужно обрезать его, команда -shave после повторной выборки обычно имеет смысл, если изображение центрировано на странице.

Что касается расширения PHP IMagick , я лично никогда им не пользуюсь - поэтому не уверен, как вы указываете на него подсказки при чтении файлов, но я надеюсь, что это возможно.

4 голосов
/ 09 декабря 2014
$im = new imagick();

//this must be called before reading the image, otherwise has no effect

$img->setResolution(200,200);

//read the pdf

$img->readImage("{$pdf_file}[0]");
1 голос
/ 20 января 2016

Нажмите здесь для более подробной информации. Попробуйте это:

HTML

<html>

  <body>

    <form action="ConvertPdfToImg.php" enctype="multipart/form-data" method="post" name="f1">

      <input id="templateDoc" name="templateDoc" type="file" />

      <input type="submit" />

    </form>

  </body>

</html>

PHP

$pdfAbsolutePath = __DIR__."/test.pdf";

if (move_uploaded_file($_FILES['templateDoc']["tmp_name"], $pdfAbsolutePath)) {

      $im             = new imagick($pdfAbsolutePath);

      $noOfPagesInPDF = $im->getNumberImages(); 

      if ($noOfPagesInPDF) { 

          for ($i = 0; $i < $noOfPagesInPDF; $i++) { 

              $url = $pdfAbsolutePath.'['.$i.']'; 

              $image = new Imagick($url);

              $image->setImageFormat("jpg"); 

              $image->writeImage(__DIR__."/".($i+1).'-'.rand().'.jpg'); 

          }

          echo "All pages of PDF is converted to images";

      }
      echo "PDF doesn't have any pages";

}
1 голос
/ 10 февраля 2012

Убедитесь, что PDF создан с правильными цветовыми профилями, у меня однажды был очень размытый JPG после изменения размера из-за того, что исходный файл был создан с неправильным цветовым профилем. См. Также: Преобразование ImageMagick PDF в JPEG приводит к зеленому квадрату, где изображение должно быть

...