4

我有一个 PHP 脚本来创建 PDF 文件的 PNG 缩略图,如下所示:

<?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)."' />";    
?>

它返回一个缩略图,但背景是透明的。我想设置白色背景颜色(将 alpha 图层更改为白色)。我怎样才能做到这一点?

4

2 回答 2

4

解决方案不是在背景色中,而是在 alpha 通道中!试试这个代码:

$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 回答