2017-03-09 97 views
-1

對不起,我的語言。我有方形CIImage。我需要得到一層面膜並將其強加在圖像上。也許具體的CIFilter幫助我?如何獲得圓形圖層蒙版?

+0

你需要一個圓形圖像?或只是圓角? –

+0

我想一個圓形圖像。 – Metman

+0

將imageView.layer.cornerRadius設置爲圖像視圖寬度的一半,然後檢查一次。 –

回答

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 

雖然這隻適用於圓

+0

我想你可以應用這個任何橢圓以及通過應用轉換過濾器的圓形過濾器。 –

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

}