2012-02-10 47 views
24

我用豆蔻脚本将PDF转换为JPG。这有效,但质量很差。PDF格式转换为JPEG PHP和ImageMagick的

脚本:

$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大小。

回答

37

它可以通过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(); 
+3

看来,在某些情况下,ImageMagick的要求安装Ghostscript的,因为否则会抛出一个后记代表世界上为什么失败的错误 – Zsolti 2013-11-06 12:13:31

+0

做setResolution和setImageResolution做不同的事情,并在该文档相同的描述?谢谢,你完全救了我。 – Hissvard 2017-08-31 14:01:04

5

从PDF产生的图像的质量可以在PDF阅读之前设置density(这是DPI)来改变 - 这得到过去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,好吧,我从来没有亲自使用它 - 所以我不确定你如何指定文件读取提示,但我希望它是可能的。

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

点击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"; 

} 
+0

你完全忽略了一点,所有申请的处理是完全无关的问题。你应该总是清楚地指出你正在指向你自己的博客。 – 2017-04-26 10:02:02