使用 Imagemagick 复制 Photoshop 的“扩展选择”功能

Max*_*ian 1 php image imagemagick edge-detection

我正在寻找使用 Imagemagick (通过 PHP)来处理具有透明背景和一些半透明像素(如渐变)的 PNG。图像必须像这样进行更改: 1. 将所有非透明像素设置为相同的纯色(黑色即可)
2. 将图像内形状的边缘扩展 25 个像素

使用此输入(透明 BG,某些像素是半透明的):
输入PNG

我期望这样的输出:
输出 PNG

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

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

Mar*_*ell 5

这个答案是一个正在进行的工作,我想我们可以帮助你......

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

convert shapes.png -threshold 100% result.png
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

convert shapes.png -threshold 100% -channel A -morphology dilate octagon:25 result.png
Run Code Online (Sandbox Code Playgroud)

还有其他形状(圆盘、菱形等)和其他扩张程度(我选择了 25 种扩张) - 请参阅 Anthony Thyssen 出色的 ImageMagick 示例页面...此处

在此输入图像描述

-threshold不确定透明度的渐变是怎么回事,所以我在 alpha 通道上添加了额外的内容:

convert shapes.png -threshold 100% -channel A -morphology dilate octagon:25 -threshold 99% result.png
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

我将让您将其翻译成 PHP - 应该很容易。