设置ImageMagick PNG图像的背景颜色

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


如果您将其制作成JPG文件而不是PNG文件呢? - George Kastrinis
最初我尝试制作JPG文件...但是我得到了一个黑色背景的JPG :P :P ...这就是为什么我转向PNG的原因...你知道如何更改JPG黑色背景颜色吗?或者建议我如何在PNG中设置一个... - Alfred
我会尝试绘制一个与图像相同大小的矩形,并填充它...? - helle
@helle,那很困难...无论如何..祝你好运.. :) - Alfred
我不明白。我不是以英语为母语的人。ny是什么意思?bast是什么意思?谢谢。 - helle
显示剩余2条评论
2个回答

4
解决方案不在背景颜色中,而在于alpha通道!试试这段代码:
$im->readImage($fileInput);
$im->setImageAlphaChannel(imagick::ALPHACHANNEL_DEACTIVATE);

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接