![](/img/trans.png)
[英]ImageMagick / Imagick: Convert a PNG with Alpha channel into a 2 color image (Color, Transparent)
[英]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圖層更改為白色)。 我怎樣才能做到這一點??
在此先感謝... :)
blasteralfred
解決方案不是背景顏色,而是alpha通道! 試試這段代碼:
$im->readImage($fileInput);
$im->setImageAlphaChannel(imagick::ALPHACHANNEL_DEACTIVATE);
我正在做類似的事情,雖然我實際上是把圖像寫到磁盤上 - 當我使用你的直接輸出時,它起作用了,我得到了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)."' />";
?>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.