使用 Imagemagick 复制 photoshop 的 "expand selection" 功能

Using Imagemagick to replicate photoshop's "expand selection" functionality

我希望使用 Imagemagick(通过 PHP)处理具有透明背景和一些半透明像素(如渐变)的 PNG。必须像这样更改图像: 1.使所有非透明像素相同,纯色(黑色可以)
2. 将图像内形状的边缘扩大 25 像素

有了这个输入(透明BG,一些像素是半透明的):

我期望这样的输出:

这不仅仅是调整图像大小。我正在寻找类似于 photoshop 扩展选区的功能(例如,顶部圆圈中的间隙被取消,因为它小于 25 像素扩展)。

目前,我有扫描图像并找到边缘的代码,但当图像中存在多个未连接的形状时会失败。 Imagemagick 是否有办法做到这一点,或者是否有一种算法可以用来扫描图像并生成我需要的输出?速度 的一个问题,但我可以接受一个缓慢的解决方案,只要它有效。

这个答案正在进行中,我想我们可以帮助你...

基本上,您的步骤 1) 意味着您想要将整个图像的 RGB 通道设置为黑色,同时保留透明度来确定形状 - 我认为。好吧,我们可以通过多种方式做到这一点,但让我们使用这样的阈值:

convert shapes.png -threshold 100% result.png

现在您想扩大选择范围,但选择范围仅在 Alpha/transparency 通道中,因此我们将操作限制在该通道以保持速度。用形态学术语来说,你正在寻找膨胀,所以你可以这样做:

convert shapes.png -threshold 100% -channel A -morphology dilate octagon:25 result.png

还有其他形状(圆盘、菱形等)和其他扩张度数(我选择了 25 次扩张)- 看看 Anthony Thyssen 出色的 ImageMagick 示例页面... here.

不确定透明度的渐变是怎么回事,所以我在 alpha 通道上用额外的 -threshold 对它们进行了处理:

convert shapes.png -threshold 100% -channel A -morphology dilate octagon:25 -threshold 99% result.png

我会让你把它翻译成 PHP - 应该很容易。