使用PHP和ImageMagick将PDF转换为JPG

时间:2012-02-10 11:23:00

标签: php pdf imagemagick jpeg

我正在使用litte脚本将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 个答案:

答案 0 :(得分:39)

可以使用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();

答案 1 :(得分:6)

通过在读取PDF之前设置density(即DPI),可以更改从PDF生成的图像的质量 - 这会转到ghostscript (gs)下面的光栅化PDF。要获得良好的结果,请以所需密度的两倍进行超级采样,并使用resample返回所需的DPI。如果您想要RGB JPEG,请务必将colorspace更改为RGB。

convert的典型命令行版本可能是:

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

如果你需要裁剪它,如果图像在页面中居中,则重采样后面的-shave命令通常是合理的。

至于PHP IMagick extension,我从不亲自使用它 - 所以我不确定你如何指定文件阅读提示,但我希望它是可能的。

答案 2 :(得分:4)

$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]");

答案 3 :(得分:1)

确保使用正确的颜色配置文件创建PDF,因为源文件是使用错误的颜色配置文件创建的,因此我在调整大小后曾让我的JPG非常褪色。另见:ImageMagick PDF to JPEG conversion results in green square where image should be

答案 4 :(得分:1)

点击here了解详情。试试这个:

<强> 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";

}