我使用以下代码来掩盖另一个图像上的一个图像。在输出时,它给我一个黑色背景的图像。
但我需要白色背景或透明背景。
以下是我用来掩盖一个图像而不是另一个图像的代码。
<?PHP
$destination_path = getcwd().DIRECTORY_SEPARATOR;
$im1="image1.png";
$im2="image2.png";
$i1="$destination_path$im1";
$i2="$destination_path$im2";
$base = new Imagick($i1);
$mask = new Imagick($i2);
// Setting same size for all images
$base->resizeImage(274, 275, Imagick::FILTER_LANCZOS, 1);
// Copy opacity mask
$base->compositeImage($mask, Imagick::COMPOSITE_DSTIN, 0, 0, Imagick::CHANNEL_ALPHA);
$base->writeImage('output.png');
header("Content-Type: image/png");
echo $base;
?>
答案 0 :(得分:6)
诀窍是使用:$im = $im->flattenImages();
:
<?php
$im = new Imagick($filename);
$im->setImageBackgroundColor('#ffffff');
$im = $im->flattenImages();
$im->setImageFormat("jpeg");
$im->setImageCompressionQuality(95);
$im->writeImage($filename);
答案 1 :(得分:2)
新方法:
flattenImages()现在似乎已被弃用。
如果您的PHP imagick模块为3.2.0b2或更高版本,则当前解决方案如下:
$im->setImageBackgroundColor('#ffffff');
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
$im = $im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
如果您的PHP imagick模块小于该模块,则无法识别ALPHACHANNEL_REMOVE
常量,可以改用以下代码:
$im->setImageBackgroundColor('#ffffff');
$im->setImageAlphaChannel(11);
$im = $im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
检查imagick版本
要检查imagick模块的版本,请运行以下命令:
php --ri imagick
注意:上面的命令将同时提供imagick版本和ImageMagick版本。您正在寻找imagick版本。
答案 2 :(得分:0)
试一试:Background Color 白:
<?php
$image = new imagick( "opossum.jpg" );
$image->setimagebackgroundcolor("#fad888"); //Here you can mention the color
$image->waveImage( 20, 176);
header( "Content-Type: image/jpeg" );
echo $image;
?>
透明背景:
<?php
$im = new Imagick();
$im->setBackgroundColor(new ImagickPixel('transparent'));
$im->readImage('carte_Alain2.svg');
$im->setImageFormat("png32");
header('Content-type: image/png');
echo $im;
?>
另请查看此链接: