我希望使用Imagemagick(通过PHP)来处理具有透明背景和一些半透明像素(如渐变)的PNG。图像必须像这样改变:
1.使所有非透明像素相同,纯色(黑色很好)
2.将图像中的形状边缘扩展25像素
这不仅仅是调整图像大小。我正在寻找类似于photoshop如何扩展选择的功能(例如,顶部圆圈中的间隙被否定,因为它小于25像素扩展)。
目前,我有扫描图像并找到边缘的代码,但是当图像中有多个未连接的形状时会失败。 Imagemagick有办法做到这一点,还是有一种算法可以用来扫描图像并生成我需要的输出?速度是的一个问题,但只要有效,我就可以使用缓慢的解决方案。
答案 0 :(得分:4)
这个答案是一项正在进行的工作,我想我们可以帮助你到那里......
基本上,您的步骤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 - 应该很简单。