使用Imagemagick复制photoshop"扩展选择"功能

时间:2015-10-22 22:19:19

标签: php image imagemagick edge-detection

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

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

我希望输出如下:
Output PNG

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

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

1 个答案:

答案 0 :(得分:4)

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

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

convert shapes.png -threshold 100% result.png

enter image description here

现在您想要扩展选择,但选择仅在Alpha /透明度通道中,因此我们将操作限制在该通道,这将保持加速。在形态学方面,你正在寻找扩张,所以你可以这样做:

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

还有其他形状(磁盘,钻石等)和其他扩张程度(我选择25次扩张) - 看看Anthony Thyssen出色的ImageMagick示例页面...... here

enter image description here

不确定透明度的渐变是怎么回事,所以我在alpha通道上用额外的-threshold来摧毁它们:

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

enter image description here

我会让你把它翻译成PHP - 应该很简单。