有人能解释我如何使用imagick pecl将运行良好的imagick cli命令转换为PHP代码吗?我对convert
命令的语法不够熟悉,快速执行它对我来说很复杂。
您可能不会阅读下面的这堆文本,只需帮助将cli命令转换为PHP即可。:)
我有一个部分透明的人物位于不透明的白色背景上(原始图像)。用一些背景色/图像填充透明的图形,我会在白色背景上有很多彩色图形。
我现在需要的是(以及imagick的作用):我需要去除结果图像上的白色背景,这样唯一的彩色图形就可以在透明的背景上保留一些模糊的边缘。
我在做什么:
-
我用黑色填充原始图像,以在白色背景上获得对比度更高的黑色图形。接下来,用命令删除白色背景:
convert ./black.png -fuzz 70% -fill none -floodfill +0+0 white -channel A -blur 0x1 ./mask.png
所以我有一些透明的面具在将来使用。
-
将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);
仅此而已。我们有一个透明背景上的绿色人物。