imagick控制台命令到PHP imagick中


imagick console commands into PHP Imagick

有人能解释我如何使用imagick pecl将运行良好的imagick cli命令转换为PHP代码吗?我对convert命令的语法不够熟悉,快速执行它对我来说很复杂。

您可能不会阅读下面的这堆文本,只需帮助将cli命令转换为PHP即可。:)

我有一个部分透明的人物位于不透明的白色背景上(原始图像)。用一些背景色/图像填充透明的图形,我会在白色背景上有很多彩色图形。

我现在需要的是(以及imagick的作用):我需要去除结果图像上的白色背景,这样唯一的彩色图形就可以在透明的背景上保留一些模糊的边缘。

我在做什么:

  1. 我用黑色填充原始图像,以在白色背景上获得对比度更高的黑色图形。接下来,用命令删除白色背景:

    convert ./black.png -fuzz 70% -fill none -floodfill +0+0 white -channel A -blur 0x1 ./mask.png

所以我有一些透明的面具在将来使用。

  1. 将mask.png应用于从原始图像中获得的一些彩色图像(green.php):

    convert ./green.png -alpha Off ./mask.png -compose CopyOpacity -composite PNG32:result.png

这些命令必须被翻译成PHP。有人能给我建议吗?

我已经准备好回答我的问题了。

准备原始图像以将其用作遮罩。使部分透明的黑色图形:

$blank = new 'Imagick('./original.png');
$blank->setimagebackgroundcolor('#000000');

从空白处制作黑色口罩。去除不透明的白色背景,使其完全透明:

$mask = $blank->flattenImages();
$mask->floodfillpaintimage('none', 30000, '#FFFFFF', 1, 1, false, 'Imagick::CHANNEL_ALPHA);
$mask->blurImage(0, 1, 'Imagick::CHANNEL_ALL);

所以我们有一个掩模图像,它只包括我们需要的图形(黑色)。现在我们想要一个绿色的数字,拿它来说:

$greenBlank = new 'Imagick('./original.png');
$greenBlank->setimagebackgroundcolor('#00FF00');
$green = $greenBlank->flattenImages();

现在将准备好的面膜涂抹在我们的$green上。

$green->compositeImage($mask, 'Imagick::COMPOSITE_COPYOPACITY, 0, 0);

仅此而已。我们有一个透明背景上的绿色人物。