web-dev-qa-db-ja.com

PDFをJPGにPHPおよびImageMagickで変換

私はPDF= JPGに変換するためにlitteスクリプトを使用しています。それは機能しますが、品質は非常に劣っています。

スクリプト:

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

もう1つ、PDFの元のサイズを維持したいのですが、変換によってJPGのサイズがトリミングされます。

29

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

PDFから生成される画像の品質は、PDF-を読み取る前にdensity(DPI))を設定することにより変更できます。これは ghostscript (gs) を過ぎてPDFをラスタライズします。良好な結果を得るには、必要な密度の2倍でスーパーサンプリングし、resampleを使用して必要なDPI。RGB JPEGが必要な場合は、colorspaceをRGBに変更してください。

convertの一般的なコマンドラインバージョンは次のとおりです。

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

画像をトリミングする必要がある場合、画像がページ内の中央にある場合、リサンプルに続く-shaveコマンドは通常賢明です。

PHP IMagick extension については、個人的には決して使用しません。そのため、ファイル読み取りのヒントをどのように指定するかはわかりませんが、可能になると思います。

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]");
5
user4341845

PDFが正しいカラープロファイルで作成されていることを確認してください。ソースファイルが間違ったカラープロファイルで作成されたため、サイズ変更後にJPGが非常に色あせました。参照: ImageMagick PDFからJPEGへの変換の結果、画像があるはずの緑の正方形になります

1
HoleInVoid

詳細については、 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";

}
1