设置图像魔术 PNG 图像背景颜色


Set ImageMagick PNG image background color

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

解决方案不在背景颜色中,而在 alpha 通道中!尝试使用以下代码:

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

我正在做类似的事情,尽管我实际上是将映像写入磁盘 -当我使用您的直接输出时,它起作用了,并且我从 PDF 中获得了实际颜色。

通过一些调试,我认为该问题实际上与

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