7

次のようにpdfのjpgサムネイルを作成するためのphpスクリプトがあります。

<?php
$file ="test.pdf";
$im = new imagick(realpath($file).'[0]');
$im->setImageFormat("jpg");
$im->resizeImage(200,200,1,0);
// start buffering
ob_start();
$thumbnail = $im->getImageBlob();
$contents =  ob_get_contents();
ob_end_clean();
echo "<img src='data:image/jpg;base64,".base64_encode($thumbnail)."' />";
?>

しかし、結果のjpgの背景は白ではなく黒になります。これを修正するにはどうすればよいですか?

4

8 に答える 8

1

Imagick のバージョンが最新でない場合、setImageBackgroundColor が間違っている可能性があります。

次の行を入れ替えます

$im->setImageBackgroundColor("red");

これに (Imagick バージョン >= 2.1.0)

$im->setBackgroundColor(new ImagickPixel("red"));

または (Imagick バージョン < 2.1.0)

$im->setBackgroundColor("red");
于 2011-05-23T16:23:50.590 に答える
1

背景色の問題が発生した場合は、このコード$im->setimageformat("jpg");をこの コードに変更してください。$im->setimageformat("png");

于 2015-05-19T05:24:30.093 に答える
1

これを追加するだけで、JPGが黒い背景で作成されなくなります

-alpha off
于 2012-09-07T09:39:55.317 に答える
0

PDFに複数のページがある場合は、わずかに異なるアプローチが必要であると言って、優れた役立つ回答に追加したいと思います。

私が発見して驚いたのは、Imagickクラスが を実装Iterableしていることです。つまり、ループを実行してforeach各ページを順番に操作できます (レイヤー、色、およびアルファ チャネルの変更が有効になるだけに見えるため、これが必要であることがわかりました)。最後のページにあります) 別のImagickオブジェクトとして表示されます:

$im = new Imagick('path/to/file.pdf');
foreach ($im as $c => $page)
{
    // do what you need to do with each page and then...
    $im->writeImage('path/to/image-'.$c.'.jpg');
}
于 2022-02-24T22:54:03.383 に答える
0

新しい imagick() を作成した直後に flattenImages() を使用するだけです。

$im = new Imagick('file.pdf[0]');
$im = $im->flattenImages();

編集: flattenImages メソッドは廃止され、削除されました。使用する

$im = $im->mergeImageLayers( imagick::LAYERMETHOD_FLATTEN );
于 2021-12-02T22:48:46.793 に答える