2012-02-10 17 views
24

Sto utilizzando uno script litte per convertire PDF in JPG. Funziona ma la qualità è molto scarsa.Converti PDF in JPEG con PHP e ImageMagick

Lo script:

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

più una cosa, voglio mantenere la dimensione originale del PDF, ma la conversione pota la dimensione del JPG.

risposta

37

È possibile utilizzare setResolution, ma è necessario farlo prima di caricare un'immagine. provare qualcosa di simile:

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

Sembra che in alcuni casi ImageMagick richieda l'installazione di Ghostscript, perché altrimenti verrà generato un errore di delegato Postscript non riuscito – Zsolti

+0

Perché nel mondo setResolution e setImageResolution fanno cose diverse e hanno la stessa descrizione nei documenti ?! Grazie, mi hai totalmente salvato. – Hissvard

5

La qualità dell'immagine prodotta dal PDF può essere modificato impostando il density (che è il DPI) prima di leggere nel PDF - questo diventa passato per ghostscript (gs) sotto il quale rasterizza il file PDF. Per ottenere un buon risultato, supersampare al doppio della densità desiderata e utilizzare resample per tornare al DPI desiderato. Ricordarsi di cambiare lo colorspace in RGB se si desidera un JPEG RGB.

Una tipica versione a riga di comando per convert potrebbe essere:

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

Se è necessario ritagliare, un comando -shave seguendo il ricampionamento è di solito sensibile, se l'immagine è centrata all'interno della pagina.

Per quanto riguarda lo PHP IMagick extension, beh, non lo uso mai personalmente, quindi sono incerto su come si specificano i suggerimenti per la lettura dei file, ma mi auguro che sia possibile.

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

Clicca here per maggiori dettagli. Prova questo:

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

Hai perso totalmente il punto e tutta questa gestione delle richieste è assolutamente estranea alla domanda. E dovresti sempre dire chiaramente che stai indicando il tuo blog. –

Problemi correlati