Imagick - 将黑色背景变为白色

4

我正在使用以下代码将一个图像覆盖在另一个图像上进行蒙版处理。输出的图像具有黑色背景。

但是我需要白色背景或透明背景。

以下是我用来将一个图像覆盖在另一个图像上进行蒙版处理的代码。

<?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;
?>
3个回答

12

新方法:

flattenImages() 现在似乎已经被弃用。

如果你的 PHP imagick 模块是 3.2.0b2 或更高版本,则当前解决方案如下:

$im->setImageBackgroundColor('#ffffff');
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
$im = $im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);

如果您的PHP Imagick模块版本低于此要求,那么将无法识别ALPHACHANNEL_REMOVE常量,您可以使用以下代码代替:

如果您的 PHP imagick 模块版本较低,则无法识别 ALPHACHANNEL_REMOVE 常量,您可以使用以下代码替代:

$im->setImageBackgroundColor('#ffffff');
$im->setImageAlphaChannel(11);
$im = $im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);

检查您的Imagick版本

要检查您的Imagick模块版本,请运行以下命令:

php --ri imagick

注意:上述命令将同时给出imagick版本和ImageMagick版本。您要查找的是imagick版本。


7
诀窍在于使用:$im = $im->flattenImages();
<?php
$im = new Imagick($filename);

$im->setImageBackgroundColor('#ffffff');
$im = $im->flattenImages();

$im->setImageFormat("jpeg");
$im->setImageCompressionQuality(95);
$im->writeImage($filename);

它无法处理PDF文件。如果您使用PDF,它将把所有页面合并为一个。 - Isfettcom
对我来说非常有效。但是我一个接一个地打开页面:$im->readImage( $file . "[$page]" ); - Laurent

0

试试这个:背景颜色 白色:

<?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; 
?>

还请查看以下链接:

http://php.net/manual/en/imagick.setbackgroundcolor.php


他们没有给我白色背景,也没有创建一个带透明背景的图像。 - user2360906
但是对我来说它运行得很好。。如果我在我的系统上运行上述代码! :( - DonOfDen
请查看此解决方案!https://dev59.com/8n_gs4cB2Jgan1znQwfb - DonOfDen
carte_Alain2.svg是什么类型的图像? - user2360906
这是一个示例,如果你愿意的话,可以将其更改为PNG格式。 - DonOfDen

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