UIImage 不保存

UIImage not Saving

目前正在失去生存的意愿,试图弄清楚为什么这不起作用! 基本上我已经生成了一个二维码 (Swift 4/Xcode 9) 并将其显示在 UIImageView 中。我想保存此图像以在应用程序其他地方的弹出视图中使用。 我生成二维码的代码如下:

func generateQRCode(from string: NSString) -> UIImage? {
    let data = string.data(using: String.Encoding.isoLatin1.rawValue, allowLossyConversion: false)
    if let filter = CIFilter(name: "CIQRCodeGenerator") {
        guard let colorFilter = CIFilter(name: "CIFalseColor") else { return nil }

        filter.setValue(data, forKey: "inputMessage")

        filter.setValue("H", forKey: "inputCorrectionLevel")
        colorFilter.setValue(filter.outputImage, forKey: "inputImage")
        colorFilter.setValue(CIColor(red: 255/255, green: 87/255, blue: 34/255, alpha: 1), forKey: "inputColor1") // Background ORANGE
        colorFilter.setValue(CIColor(red: 1, green: 1, blue: 1), forKey: "inputColor0") // Foreground or the barcode WHITE
        guard let qrCodeImage = colorFilter.outputImage
            else {
                return nil
        }
        let scaleX = myQRCode.frame.size.width / qrCodeImage.extent.size.width
        let scaleY = myQRCode.frame.size.height / qrCodeImage.extent.size.height
        let transform = CGAffineTransform(scaleX: scaleX, y: scaleY)


        if let output = colorFilter.outputImage?.transformed(by: transform) {
            return UIImage(ciImage: output)
        }
    }
    return nil
}

然后我在viewDidLoad中运行下面的代码来显示二维码图片:

let image = generateQRCode(from: jsonString)
    myImageView.image = image

然后我获取文档目录路径并尝试保存图像:

func getDocumentsDirectory() -> URL {
    let paths = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)
    return paths[0]
}

func saveQRImage() {
    if let data = UIImagePNGRepresentation(myImageView.image!) {
        let filename = getDocumentsDirectory().appendingPathComponent("qrcode.png")
        try? data.write(to: filename)
        print(data)
    }
}

我尝试在 viewDidLoad 和按下按钮时调用 saveQRImage() 函数,但都没有保存图像。我在 saveQRImage() 中的第一个 if let 语句之后放置了一个断点,但发现它不是 运行ning 函数。

我曾尝试声明一个名为 finishedQRCode 的空 UIImage 变量并声明 finishedQRCode = myImageView.image 并在 saveQRImage() 函数中使用它,但这没有区别!

我做错了什么非常简单的事情吗?

任何帮助将不胜感激!

您无法从 ciimage 中获取 UIImageJPEGRepresentationUIImagePNGRepresentation。您需要在新的上下文中重新绘制图像:

let size = CGSize(width: scaleX, height: scaleY)
UIGraphicsBeginImageContextWithOptions(size, false, 0)
defer { UIGraphicsEndImageContext() }
UIImage(ciImage: output).draw(in: CGRect(origin: .zero, size: size))
if let qrcodeImage = UIGraphicsGetImageFromCurrentImageContext() {
   let imageData = UIImageJPEGRepresentation(qrcodeImage, 1)
}