设置imagemagick png图像背景颜色

时间:2011-05-23 14:47:19

标签: php imagemagick imagick

我有一个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图层更改为白色)。我怎么能这样做?

提前致谢... :)

blasteralfred

2 个答案:

答案 0 :(得分:4)

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

$im->readImage($fileInput);
$im->setImageAlphaChannel(imagick::ALPHACHANNEL_DEACTIVATE);

答案 1 :(得分: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)."' />";    
?>