无法将CIImage转换为Swift 3.0中的UIImage

我正在使用以下代码来制作图像格式的QR Code码:

  func createQRFromString(str: String) -> CIImage? { let stringData = str.dataUsingEncoding(NSUTF8StringEncoding) let filter = CIFilter(name: "CIQRCodeGenerator") filter?.setValue(stringData, forKey: "inputMessage") filter?.setValue("H", forKey: "inputCorrectionLevel") return filter?.outputImage } 

然后我添加到UIImageView像这样:

  if let img = createQRFromString(strQRData) { let somImage = UIImage(CIImage: img, scale: 1.0, orientation: UIImageOrientation.Down) imgviewQRcode.image = somImage } 

现在我需要将其保存为JPEGPNG文件。 但是当我这样做时,我的应用程序崩溃:

  @IBAction func btnSave(sender: AnyObject) { // // Define the specific path, image name let documentsDirectoryURL = try! NSFileManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: true) // create a name for your image let fileURL = documentsDirectoryURL.URLByAppendingPathComponent("image.jpg") if let image = imgviewQRcode.image // imgviewQRcode is UIImageView { if let path = fileURL?.path { if !NSFileManager.defaultManager().fileExistsAtPath(fileURL!.path!) { if UIImageJPEGRepresentation(image, 1.0)!.writeToFile(path, atomically: true) { print("file saved") } }//Checking existing file }//Checking path }//CHecking image } 

崩溃点

  UIImageJPEGRepresentation(image, 1.0)!.writeToFile(path, atomically: true) 

原因

 fatal error: unexpectedly found nil while unwrapping an Optional value 

debuggingtesting:

在这里输入图像说明

 func convert(cmage:CIImage) -> UIImage { let context:CIContext = CIContext.init(options: nil) let cgImage:CGImage = context.createCGImage(cmage, from: cmage.extent)! let image:UIImage = UIImage.init(cgImage: cgImage) return image } 

使用此function将CIImage转换为UIImage。 有用 。

我的最终代码

  func generateQRCode(from string: String) -> UIImage? { let data = string.data(using: String.Encoding.ascii) if let filter = CIFilter(name: "CIQRCodeGenerator") { filter.setValue(data, forKey: "inputMessage") let transform = CGAffineTransform(scaleX: 3, y: 3) if let output = filter.outputImage?.transformed(by: transform) { let context:CIContext = CIContext.init(options: nil) let cgImage:CGImage = context.createCGImage(output, from: output.extent)! let image:UIImage = UIImage.init(cgImage: cgImage) return image } } return nil }