如何获得圆形图层蒙版?

How get round layer mask?

我有一个正方形CIImage
我想添加 round layer of a mask 并将其强加到这张图片上。

我应该使用 CIFilter 吗?

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

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

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

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

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!
        }

}

要完全用 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

虽然这只适用于圈子