Algoritmo o biblioteca de iOS y Android para aplicar bordes a las imágenes similares a las de Photoshop

Estoy buscando la biblioteca de iOS y Android para (preferentemente) o algorithm que me ayude a plumear los bordes de la image de una manera similar a cómo se maneja en Photoshop. La siguiente ilustración muestra el efecto deseado del algorithm. No me interesan los límites de la image, solo bordes alfa. He estado buscando un algorithm que pueda lograrlo durante unos días sin suerte. Cualquier ayuda será apreciada.

Imagen de plumaje

Suponiendo que tiene un canal alfa (como en una foto con background transparente), parece que la matriz de desenfoque de convolución regular debería satisfacerlo.

Sin embargo, en lugar de pasar por canales RGB, solo debe pasar por el canal ALPHA.

Consulte el filter de desenfoque aquí: https://en.wikipedia.org/wiki/Kernel_%28image_processing%29

Estás interesado en desenfoque de cuadro / desenfoque gaussiano. Sin embargo, para hacer que este efecto sea más suave, debe usar una matriz de mayor tamaño.

La razón por la cual el algorithm satisfará sus necesidades es que si todos los píxeles circundantes tienen alfa 0, será todavía 0. Si 255, se mantendrá 255. Solo los píxeles en el área del borde entre alfa 0/255 se verán afectados.

Editar:

Por favor revise este violín con chrome (en ff que es muy lento): http://jsfiddle.net/5L40ms65/

Puedes echar un vistazo al algorithm al final del código. Desde la implementación noté que: – no es necesario desenfocar si todos los píxeles de las ciudades son 255 o 0 (canal alfa) – se requiere también para desenfocar RGB en otro caso

En general:

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 

Ejemplo de resultado con radio = 2

Por supuesto, esto es más bien un progtwig conceptual, hay mucho lugar para memorizar y sintonizar este guión, sin embargo, debería aclarar claramente

introduzca la descripción de la imagen aquí

Podría cambiar el alfa de su borde en function del color de background de la vista.

 var r:Float! var g:Float! var b:Float! var a:Float! if self.view.backgroundColor.getRed(networking: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(networking: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 } 

Puede ver errores en este código porque aún no lo he probado.