如何获得圆形图层蒙版?

时间:2017-03-09 06:58:09

标签: ios swift

对不起我的语言。我有方形CIImage。我需要获得一个圆形的面具层并将其强加在图像上。也许特定的CIFilter会帮助我吗?

4 个答案:

答案 0 :(得分:2)

要完全使用CoreImage,您可以按照以下方法执行:

let image = CIImage(contentsOf: URL(string: "https://s3.amazonaws.com/uploads.hipchat.com/27364/1957261/bJERqq8O2V3NVok/upload.jpg")!)

// Construct a circle
let circle = CIFilter(name: "CIRadialGradient", withInputParameters:[
    "inputRadius0":100,
    "inputRadius1":100,
    "inputColor0":CIColor(red: 1, green: 1, blue: 1, alpha:1),
    "inputColor1":CIColor(red: 0, green: 0, blue: 0, alpha:0)
    ])?.outputImage

// Turn the circle into an alpha mask
let mask = CIFilter(name: "CIMaskToAlpha", withInputParameters: [kCIInputImageKey:circle!])?.outputImage

// Apply the mask to the input image
let combine = CIFilter(name: "CIBlendWithAlphaMask", withInputParameters:[
    kCIInputMaskImageKey:mask!,
    kCIInputImageKey:image!
    ])

let output = combine?.outputImage

虽然这只适用于圈子

答案 1 :(得分:0)

像这样使用,对于带边框的圆形图像

self.profileImageView.layer.cornerRadius = self.profileImageView.frame.size.width / 2
self.profileImageView.clipsToBounds = YES;

 self.profileImageView.layer.borderWidth = 3.0f;
 self.profileImageView.layer.borderColor = UIColor.whiteColor.CGColor

答案 2 :(得分:0)

也许这有助于使用核心图形创建圆形图像..它们使用核心图形创建圆形模糊图像。 Blur specific part of an image (rectangular, circular)?

答案 3 :(得分:0)

我解决了我的问题:)。 我用扩展名。

override var outputImage : CIImage!
    {

        if let inputImage = inputImage {
            //making UIImage from CIImage
            let uiImage = UIImage(ciImage: inputImage)

            //use extension
            let roundImage = uiImage.roundedRectImageFromImage(image:uiImage, imageSize: CGSize.init(width: uiImage.size.width/2, height: uiImage.size.width/2), cornerRadius: uiImage.size.width/2)

            //get back CIImage
            let ciImage = CIImage(image: roundImage)
           ///There other code.....
}

extension UIImage {

        func roundedRectImageFromImage(image:UIImage,imageSize:CGSize,cornerRadius:CGFloat)->UIImage{

            UIGraphicsBeginImageContextWithOptions(imageSize,false,0.0)
            let bounds=CGRect(origin: CGPoint.zero, size: imageSize)
            UIBezierPath(roundedRect: bounds, cornerRadius: cornerRadius).addClip()
            image.draw(in: bounds)
            let finalImage=UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return finalImage!
        }

}
相关问题