iOS和Androidalgorithm或图书馆羽化边缘的图像类似于Photoshop的

我正在寻找的iOS和Android库(最好)或algorithm,这将帮助我羽化图像的边缘以类似的方式如何在Photoshop中处理。 下图显示了algorithm的预期效果。 我不感兴趣羽化图像的边界,只是alpha边缘。 我一直在寻找algorithm,可以完成它几天没有运气。 任何帮助将不胜感激。

羽化图像

假设你有alpha通道(就像透明背景的照片一样),看起来正常的convul​​tion模糊matrix应该满足你。

但是,不要通过RGB通道 – 你应该只通过ALPHA通道。

在这里检查模糊filter: https : //en.wikipedia.org/wiki/Kernel_%28image_processing%29

你有兴趣在框模糊/高斯模糊。 但是为了使这个效果更平滑 – 你应该使用更大尺寸的matrix。

algorithm将满足您的需求的原因是,如果所有周围的像素都具有阿尔法0 – 它将仍然是0.如果255 – 它将保持255.仅阿尔法0/255之间的边界区域中的像素将受到影响。

编辑:

请用chrome来检查这个小提琴(这真的很慢): http : //jsfiddle.net/5L40ms65/

您可以在代码结束时查看algorithm。 由于实现我注意到: – 如果所有neigbour像素是255或0(alpha通道),不需要模糊 – 在其他情况下也需要模糊RGB

一般来说:

RADIUS = 2 (makes total width of matrix = 5) For x = 0..width for y = 0..width if all pixels in square of radius 2 are alpha = 0 do nothing elsif all pixels in square have alpha = 255 do nothing else pixel[x][y].RGB = average RGB of adjacent pixels where alpha != 0 pixel[x][y].ALPHA = average ALPHA in square 

示例结果半径= 2

当然这是一个比较概念的程序,记忆和调整这个脚本有很多地方,但是应该清楚地说明一下

在这里输入图像说明

您可以根据视图的背景颜色更改边框的Alpha。

 var r:Float! var g:Float! var b:Float! var a:Float! if self.view.backgroundColor.getRed(red:r, green:g, blue:b, alpha:a) { var imgv = UIImageView(frame: CGRect(x:100, y:100, width:100, height:100)) imgv.image = UIImage(named:"name") imgv.layer.borderWidth = 2.0 imgv.layer.borderColor = UIColor(red:r, green:g, blue:b, alpha:0.5).CGColor imgv.layer.cornerRadius = imgv.frame.size.width / 2 imgv.clipsToBounds = true }else{ //Could not get the RGB of background color } 

您可能会在此代码中看到错误,因为我尚未对其进行testing。