任何人都可以解释我如何使用Imagick pecl将运行良好的imagick cli命令转换为PHP代码吗?
我对convert
命令的语法不够熟悉,我很快就能做到这一点。
您可能无法阅读此文本堆,只是帮助将cli命令转换为PHP。 :)
我有一个部分透明的图形位于不透明的白色背景(原始图像)。通过填充透明图形的一些背景颜色/图像,我将在白色背景上有许多彩色图形。
我现在需要什么(以及想象力的来源):我需要在结果图像上移除那个白色背景,这样唯一的彩色图形就会在透明背景上留下一些模糊的边缘。
我在做什么:
我用黑色填充原始图像,以在白色背景上获得更多对比度黑色图形。接下来,使用以下命令删除白色背景:
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。有人可以建议我吗?
答案 0 :(得分:1)
我准备回答我的问题。
准备原始图像以将其用作遮罩。使部分透明的黑色图形:
$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);
就是这样。我们在透明背景上有一个绿色的数字。