如何获得圆形图层蒙版?
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!
【讨论】:
以上是关于如何获得圆形图层蒙版?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在子视图中添加图层蒙版时需要调用 layoutIfNeeded()?
GeoServer中配置的图层使用OpenLayers为啥读不出来