Convert PDF to JPEG with PHP and ImageMagick

前端 未结 5 513
执念已碎
执念已碎 2020-11-27 04:55

I\'m using a litte script to convert PDF to JPG. That works but the quality is very poor.

The script:

$im = new imagick( \'document.pdf[ 0]\' ); 
$im         


        
相关标签:
5条回答
  • 2020-11-27 05:07

    Click here for more details. Try this:

    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 讨论(0)
  • 2020-11-27 05:13
    $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 讨论(0)
  • 2020-11-27 05:19

    It can be done using setResolution, but you need to do it before loading an image. Try something like this:

    // 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();
    
    0 讨论(0)
  • 2020-11-27 05:31

    The quality of the image produced from the PDF can be changed by setting the density (which is the DPI) before reading in the PDF - this gets past to ghostscript (gs) underneath which rasterizes the PDF. To get a good result, supersample at double the density you require, and use resample to get back to the desired DPI. Remember to change the colorspace to RGB if you want an RGB JPEG.

    A typical command line version for convert might be:

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

    If you need to crop it, a -shave command following the resample is usually sensible, if the image is centred within the page.

    As for the PHP IMagick extension, well, I never personally use it - so am unsure of how you specify file reading hints to it, but I would hope it is possible.

    0 讨论(0)
  • 2020-11-27 05:34

    Ensure that the PDF is created with the correct colour profiles, I once had my JPG being very washed out after resizing due to source file was created with wrong colour profile. See also: ImageMagick PDF to JPEG conversion results in green square where image should be

    0 讨论(0)
提交回复
热议问题