ios - 无法在 Swift 3.0 中将 CIImage 转换为 UIImage

标签 ios swift uiimage swift3 ciimage

我正在使用以下代码制作图像形式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

调试测试:

enter image description here

最佳答案

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
}

使用此函数将 CIImage 转换为 UIImage 。它有效。

关于ios - 无法在 Swift 3.0 中将 CIImage 转换为 UIImage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53730268/

相关文章:

ios - 如果约束改变( swift )

ios - 将 Adob​​e Air App 交付到 AppStore 失败

ios - 自定义 UISlider 图像无法正常工作

iphone - 将 PNG 图像绘制到图形上下文中以进行混合模式操作

ios - UIImage 的裁剪中心

ios - 推送通知不起作用(仅在 Debug模式下有效)

ios - swift 用户界面。如何在 ZStack 的顶部放置一个 View ?

ios - Swift 中的音频播放未恢复到原始音量

Swift:在 NSOutlineView 中拖放

ios - 为什么我的 SwiftUI 应用程序在将 `NavigationLink` 放入 `navigationBarItems` 中的 `NavigationView` 中后向后导航时会崩溃?