如何获得圆形图层蒙版?

Posted

技术标签:

【中文标题】如何获得圆形图层蒙版?【英文标题】:How get round layer mask? 【发布时间】:2017-03-09 06:58:08 【问题描述】:

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

我应该使用CIFilter吗?

【问题讨论】:

您需要圆形图像吗?还是只是圆角? 我认为是圆形图像。 ***.com/questions/31946075/… 【参考方案1】:

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

虽然这只适用于圈子

【讨论】:

我想您也可以通过将变换过滤器应用于圆形过滤器来将其应用于任何椭圆。【参考方案2】:

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

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:

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

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!
        


【讨论】:

以上是关于如何获得圆形图层蒙版?的主要内容,如果未能解决你的问题,请参考以下文章

iOS 图层蒙版在 UIStackView 上不起作用

为啥在子视图中添加图层蒙版时需要调用 layoutIfNeeded()?

GeoServer中配置的图层使用OpenLayers为啥读不出来

在视网膜 iPad 上应用图层蒙版会隐藏所有

为啥我的图片加上图层蒙版后,用画笔擦出半透明效果时候,擦出来的都是黑白的小方格,怎么才能擦出白的

Swift mapview图层蒙版裁剪/移动视图。我究竟做错了什么?