2014-10-23 1 views
1

Я хочу, чтобы достичь эффекта, что вид пароля есть (обои картинка размыта и темнее)Размытие UIImage для достижения эффекта, как секретного кода размытия обои с быстрым

Это дает мне черный экран

func blurWithCoreImage(){ 

    var inputImage = CIImage(image: UIImage(named: "wallpaper")); 

    // Apply gaussian blur filter with radius of 30 
    var gaussianBlurFilter = CIFilter(name: "CIGaussianBlur"); 
    gaussianBlurFilter.setValue(inputImage, forKey: "inputImage") 
    gaussianBlurFilter.setValue(30, forKey: "inputRadius") 

    var context = CIContext(options:nil) 
    var cgImage = context.createCGImage(gaussianBlurFilter.outputImage, fromRect: inputImage.extent()) 

    // Set up output context. 
    UIGraphicsBeginImageContext(self.view.frame.size); 
    var outputContext = UIGraphicsGetCurrentContext(); 

    // Invert image coordinates 
    CGContextScaleCTM(outputContext, 1.0, -1.0); 
    CGContextTranslateCTM(outputContext, 0, -self.view.frame.size.height); 

    // Draw base image. 
    CGContextDrawImage(outputContext, self.view.frame, cgImage); 

    // Apply white tint 
    CGContextSaveGState(outputContext); 
    // CGContextSetFillColorWithColor(outputContext, UIColor.blackColor().CGColor!); 

    CGContextFillRect(outputContext, self.view.frame); 
    CGContextRestoreGState(outputContext); 

    // Output image is ready. 
    var outputImage = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 

    backgroundImg.image = outputImage; 
} 

Эта функция делает изображение стираться, но allso уменьшить изображение и слишком далеко от эффекта ввиду секретного кода

func blurWithCoreImage2(){ 
    var ciimage = CIImage(image: UIImage(named: "passcode")) 

    var filter = CIFilter(name:"CIGaussianBlur") 

    filter.setDefaults() 

    filter.setValue(ciimage, forKey: kCIInputImageKey) 

    filter.setValue(1, forKey: kCIInputRadiusKey) 

    var outputImage = filter.outputImage; 

    var finalImage = UIImage(CIImage: outputImage); 
    backgroundImg.image = finalImage; 
    UIGraphicsEndImageContext(); 

} 
+0

Какие версии прошивки вы должны поддерживать? – JoeFryer

+0

8.0 и выше ... – Ben

+0

Хорошо, я добавил ответ. – JoeFryer

ответ

13

Как вам нужно только поддерживать IOS 8 и выше вы можете использовать новый UIVisualEffectView, который является новым встроенным способом добавления размытия.

Это очень проста в использовании, что-то вроде следующего:

let blurEffect = UIBlurEffect(style: UIBlurEffectStyle.Dark) 
let blurView = UIVisualEffectView(effect: blurEffect) 
blurView.frame = myFrame 
self.view.addSubview(blurView) 

Вы можете видеть, что вы specifiy в можете UIBlurEffectStyle, что позволит вам сделать его более темным, а также.

+0

Как я могу реализовать это с помощью UIImage – Ben

+0

Вы можете просто добавить один из этих 'UIBlurEffectView' в верхнюю часть вашего 'UIImageView' - изображение будет видимым, размытым, через размытие. – JoeFryer

+0

Да, хорошо выглядит – Ben

3

Попробуйте размыть и обрезать изображение

func applyBlurEffect(image: UIImage){ 
var imageToBlur = CIImage(image: image) 
var blurfilter = CIFilter(name: "CIGaussianBlur") 
blurfilter.setValue(5, forKey: kCIInputRadiusKey) 
blurfilter.setValue(imageToBlur, forKey: "inputImage") 
var resultImage = blurfilter.valueForKey("outputImage") as! CIImage 
var blurredImage = UIImage(CIImage: resultImage) 
var cropped:CIImage=resultImage.imageByCroppingToRect(CGRectMake(0, 0,imageToBlur.extent().size.width, imageToBlur.extent().size.height)) 
blurredImage = UIImage(CIImage: cropped) 
self.backgroundImage.image = blurredImage 
} 
0

Я попытался обновить ответ, но это было бессмысленно отрицать. Вот последний синтаксис:

Swift 3,1

let blurEffect = UIBlurEffect(style: .dark) 
let blurView = UIVisualEffectView(effect: blurEffect) 
self.view.addSubview(blurView) 
Смежные вопросы