2

コマンドラインでそれを行う方法に関する多くの回答

convert /path/to/file/file.pdf[3] output.jpg

すばらしい...しかし、メモリ処理で使用している場合、PDFlibでPDFを生成し、そのバッファを関数に出力して、選択したページのjpgプレビューを生成します。どのように?私のコード:

    [...]
    $buf = $pdf->get_buffer();

    //$buff is just a PDF stored in a string now.

    $im = new Imagick();
    $im->readimageblob($buf);

    $im->setImageFormat("jpg");
    $im->setimagecompressionquality(60);

    $len = strlen($im);
    header("Content-type: image/jpeg");
    header("Content-Length: $len");      
    header("Content-Disposition: inline; filename=test.jpg");

    echo $im;

これにより jpeg が作成されますが、常に PDF の最後のページが返されます。変換するものを選択できるようにしたい。一時ファイルを保存せず、コマンドライン(exec('convert /path/to/file/file.pdf[3] output.jpg'))構文を使用せずに実行できますか?

私が試したことを付け加えさせてください

    $im->readimageblob($buf[2]);

そしてそれはうまくいきませんでした:)

4

4 に答える 4

5

ブロブから特定のページ番号を読み取る解決策をまだ探している人は、この質問を確認してくださいPHP と ImageMagick を使用して PDF から画像が入力された配列を作成する

$img_array = array();
$im = new imagick();
$im->setResolution(150,150);
$im->readImageBlob($pdf_in);
$num_pages = $im->getNumberImages();
for($i = 0;$i < $num_pages; $i++) 
{
    $im->setIteratorIndex($i);
    $im->setImageFormat('jpeg');
    $img_array[$i] = $im->getImageBlob();
}
$im->destroy();
于 2014-03-26T21:46:01.110 に答える
3

バージョン 3.0.1 が imagic オブジェクトの最後の画像または最初の画像にある

$image_obj = new Imagick("test.pdf");次に、$image_obj の最後の画像に

使用する場合

fp_pdf = fopen("test.pdf", 'rb');
$image_obj = new Imagick();
$image_obj -> readImageFile($fp_pdf);

次に、$image_obj の最初の画像に

2番目のケースでは、最後の画像に切り替えることができます

fp_pdf = fopen("test.pdf", 'rb');
$image_obj = new Imagick();
$image_obj -> readImageFile($fp_pdf,2); // 2 can be any positive number?

次に、$image_obj の最後の画像に

echo $image_obj->getNumberImages() // Returns the number of images in the object

それから

   if ($image_obj->hadPreviousImage)
       $image_obj->previousImage() //Switch to the previous image in the object
    }

また

if ($image_obj->hasNextImage()) {
   $image_obj->nextImage())  //Switch to the next image in the object
}

たとえば、合計 6 つの画像があり、4 番目が必要な場合は、最後から実行します。

$image_obj->previousImage()
$image_obj->previousImage()
$image_obj->setImageFormat("png");
header("Content-Type: image/png");
echo $image_obj;

編集:別の発見は、あなたができることです

foreach($image_obj as $slides) {
    echo "<br>".$Obj_img->getImageWidth();
    //or wehatever you need to do.
}

編集 2:非常に簡単な解決策は、この関数$image_obj->setIteratorIndex(4)カウントをゼロから開始することです。

于 2012-09-28T00:22:43.993 に答える
2

残念ながら良いニュースではありませんが、執筆時点では、ImageMagick (および PHP ライブラリ) は、使用しようとしているページ表記をサポートしていないと断言できます。(将来これを見つける人のために:私はphp-imagick-3.0.1とimagemagick-6.6.0.4をチェックしています)。

私はあなたとまったく同じことをしようとしています.私はちょうど最後の数時間をソースを調べて、それが何をし、どのようにページを取得するかを理解しようとしました. t ストリームから読み取るとき (つまり、readBlob() 呼び出し) に使用します。

そのため、一時ファイルに入れて、代わりにそこから読み取るだけです。それほどエレガントではありませんが、うまくいきます。

于 2012-06-27T12:30:59.250 に答える