想象 - 使黑色背景白色

use*_*906 2 php transparent imagick

我使用以下代码来掩盖另一个图像上的一个图像.在输出时,它给我一个黑色背景的图像.

但我需要一个白色背景或透明背景.

以下是我用来掩盖一个图像而不是另一个图像的代码.

<?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;
?>
Run Code Online (Sandbox Code Playgroud)

koj*_*ow7 8

新方法:

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

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

$im->setImageBackgroundColor('#ffffff');
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
$im = $im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
Run Code Online (Sandbox Code Playgroud)

如果您的 PHP imagick 模块小于该值,则ALPHACHANNEL_REMOVE无法识别该常量,您可以使用以下代码:

$im->setImageBackgroundColor('#ffffff');
$im->setImageAlphaChannel(11);
$im = $im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
Run Code Online (Sandbox Code Playgroud)

检查您的 imagick 版本

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

php --ri imagick
Run Code Online (Sandbox Code Playgroud)

注意:上面的命令将同时提供 imagick 版本和 ImageMagick 版本。您正在寻找 imagick 版本。


Sim*_*amp 5

诀窍是使用$im = $im->flattenImages();::

<?php
$im = new Imagick($filename);

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

$im->setImageFormat("jpeg");
$im->setImageCompressionQuality(95);
$im->writeImage($filename);
Run Code Online (Sandbox Code Playgroud)