web-dev-qa-db-fra.com

Convertir PDF JPG avec PHP et ImageMagick

J'utilise un petit script pour convertir PDF en JPG. Cela fonctionne mais la qualité est très mauvaise.

Le scénario:

$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();

Une dernière chose, je veux conserver la taille originale du PDF, mais la conversion réduit la taille du JPG.

27
Leon van der Veen

Cela peut être fait en utilisant setResolution, mais vous devez le faire avant de charger une image .

// 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();
39
wojtek

La qualité de l'image produite à partir du PDF peut être modifiée en définissant la density (qui est le DPI) avant d'être lue dans le PDF - ceci passe au-delà de ghostscript (gs) sous laquelle le rasterise le PDF. Pour obtenir un bon résultat, effectuez un suréchantillonnage au double de la densité requise et utilisez resample pour revenir au DPI souhaité. N'oubliez pas de changer la colorspace en RVB si vous voulez un fichier JPEG RVB.

Une version typique de la ligne de commande pour convert pourrait être:

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

Si vous devez le rogner, une commande -shave après le rééchantillonnage est généralement utile, si l'image est centrée dans la page.

En ce qui concerne PHP IMagick extension }, eh bien, je ne l'utilise jamais personnellement - je ne suis donc pas sûr de la façon dont vous spécifiez les indications de lecture de fichier, mais j'espère que c'est possible.

6
Orbling
$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]");
4
user4341845

Assurez-vous que le PDF est créé avec les profils de couleurs corrects. À l’origine, mon fichier JPG était très délavé après le redimensionnement dû au fait que le fichier source avait été créé avec un profil de couleurs incorrect. Voir aussi: La conversion ImageMagick PDF en JPEG donne un carré vert où l'image devrait être

1
HoleInVoid

Cliquez ici pour plus de détails. Essaye ça:

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
Sanjay Kumar N S