Unable to convert CIImage to UIImage in Swift 3.0

I am making image form QR Code by using following 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
    }

And Then I am adding to UIImageView Like this:

  • Universal application iPad/iPhone image naming convention?
  • Fill percent of UIImageView from full UIImage with animation
  • How do NSBundle pathForResource:ofType: and UIImage imageWithContentsOfFile: handle scale and device modifiers?
  • AVFoundation UIImage behind video track
  • Is PNG preferred over JPEG for all image files on iOS?
  • Saving Picked Image to CoreData
  •     if let img = createQRFromString(strQRData) {
            let somImage = UIImage(CIImage: img, scale: 1.0, orientation: UIImageOrientation.Down)
            imgviewQRcode.image = somImage
        }
    

    Now I need to save this to a JPEG or PNG file. But when I am doing so my app crashes:

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

    Crash Point

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

    Reason

    fatal error: unexpectedly found nil while unwrapping an Optional value
    

    Debug Tests:

    enter image description here

    Solutions Collect From Internet About “Unable to convert CIImage to UIImage in Swift 3.0”

    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
    }
    

    Use this function to convert CIImage to UIImage . It works .