4

次のように、PDFファイルのPNGサムネイルを作成するPHPスクリプトがあります。

<?php
$file ="test.pdf";
$im = new imagick(realpath($file).'[0]');
$im->setImageFormat("png");
$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)."' />";    
?>

サムネイルを返しますが、背景は透明です。背景色を白に設定したい(アルファレイヤーを白に変更)。これどうやってするの?

4

2 に答える 2

4

解決策は背景色ではなく、アルファ チャネルにあります。このコードで試してください:

$im->readImage($fileInput);
$im->setImageAlphaChannel(imagick::ALPHACHANNEL_DEACTIVATE);
于 2012-11-08T16:30:34.363 に答える
2

私は実際に画像をディスクに書き込んでいますが、似たようなことをしています.直接出力を使用すると、うまくいき、PDFから実際の色が得られました.

少しデバッグしてみると、この問題は実際には

imagick::resizeImage()

関数。何らかの理由で、すべての色、圧縮などを設定すると、resizeImage によって黒い背景が追加されます。私の解決策は、サイズ変更に GD を使用して、完全に動的なサイズ変更を行うことです。そのようなことに興味がないので、単に画像サンプリング機能を使用します。コードは次のようになります。

<?php
$file ="test.pdf";
$im = new imagick(realpath($file).'[0]');
$im->setCompression(Imagick::COMPRESSION_JPEG);
$im->setCompressionQuality(80);
$im->setImageFormat("jpeg");
$im->sampleImage(200,200);
// start buffering
ob_start();
$thumbnail = $im->getImageBlob();
$contents =  ob_get_contents();
ob_end_clean();    
echo "<img src='data:image/jpg;base64,".base64_encode($thumbnail)."' />";    
?>
于 2011-05-25T16:32:13.247 に答える