it-swarm.com.de

Konvertieren PDF JPG mit PHP und ImageMagick

Ich verwende ein kleines Skript, um PDF in JPG zu konvertieren. Das funktioniert aber die Qualität ist sehr schlecht.

Das Skript:

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

Noch etwas, ich möchte die Originalgröße von PDF beibehalten, aber die Konvertierung beschneidet die Größe des JPG.

27

Sie können dies mit setResolution tun, aber Sie müssen dies tun, bevor Sie ein Bild laden

// 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

Die Qualität des aus PDF erzeugten Bildes kann geändert werden, indem Sie die Variable density (dh die DPI) einstellen, bevor Sie in PDF lesen - dies passiert an ghostscript (gs) , unter der das PDF gerastert wird . Um ein gutes Ergebnis zu erhalten, sollten Sie die doppelte Dichte berechnen, die Sie benötigen, und mit resample die gewünschte DPI-Zahl wieder herstellen. Denken Sie daran, die Variable colorspace in RGB zu ändern, wenn Sie ein RGB-JPEG wünschen.

Eine typische Befehlszeilenversion für convert könnte Folgendes sein:

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

Wenn Sie es beschneiden müssen, ist ein -shave-Befehl nach dem Resample in der Regel sinnvoll, wenn das Bild innerhalb der Seite zentriert ist.

Was die PHP - IMagick-Erweiterung angeht , ich benutze sie nie persönlich - also bin ich nicht sicher, wie Sie Hinweise zum Lesen von Dateien angeben, aber ich würde hoffen, dass dies möglich ist.

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

Stellen Sie sicher, dass das PDF mit den korrekten Farbprofilen erstellt wurde. Ich hatte einmal die JPG-Datei sehr ausgewaschen, nachdem die Größe geändert wurde, da die Quelldatei ein falsches Farbprofil erstellt hatte. Siehe auch: ImageMagick PDF in JPEG-Konvertierungsergebnisse im grünen Quadrat, wo das Bild sein soll

1
HoleInVoid

Klicken Sie auf hier für weitere Details. Versuche dies:

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