【问题标题】:Using Imagemagick to replicate photoshop's "expand selection" functionality使用 Imagemagick 复制 Photoshop 的“扩展选择”功能
【发布时间】:2015-10-23 20:21:27
【问题描述】:

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

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

我希望这样的输出:

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

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

【问题讨论】:

    标签: php image imagemagick edge-detection


    【解决方案1】:

    这个答案是一项正在进行的工作,我想我们可以让你到达那里......

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

    convert shapes.png -threshold 100% result.png
    

    现在您要扩展选区,但选区实际上仅在 Alpha/透明度通道中,因此我们将操作限制在该通道中,以保持速度加快。在形态学方面,您正在寻找扩张,因此您可以执行以下操作:

    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 - 应该很容易。

    【讨论】:

    • 这是一个完美的解决方案。不知何故,PHP Imagemagick 扩展不支持形态学(尽管它在文档中)。感谢您提供优雅的解决方案。
    • 非常好 - 很高兴它为你解决了!我很惊讶形态学的东西不在 PHP 版本中。我通常不使用 PHP,但也许@emcconville 可以对此有所了解......
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多