【发布时间】:2019-01-15 17:49:32
【问题描述】:
目前正在失去生活的意愿,试图弄清楚为什么这不起作用! 基本上我已经生成了一个二维码(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语句之后放置了一个断点,但发现它没有运行该函数。
我尝试声明一个名为 finishedQRCode 的空 UIImage 变量并说 finishedQRCode = myImageView.image 并在 saveQRImage() 函数中使用它,但这没有区别!
我做错了什么真的很简单吗?
任何帮助将不胜感激!
【问题讨论】:
-
用 do-catch 块替换
try?。如果try失败,将调用catch 块,您可以打印错误。 -
我还不能给你一个确切的答案,因为我没有足够的信息。在运行
generateQRCode之后,该图像似乎为零。所以你需要在这个函数中添加一个断点并单步执行它。就个人而言,我会注释掉滤色器并尽可能基本地尝试它并确认它可以正常工作,然后重新添加滤色器,看看是否有区别。您还需要确保 JSON 字符串有效。你真的可以用 JSON 字符串制作二维码吗?我以为主要是 URL? -
见:stackoverflow.com/questions/11327921/qr-codes-limits。 JSON 数据在二维码中毫无用处
-
感谢您的快速回复!我会尝试根据您的观点提供更多信息。
generateQRCode函数似乎工作正常,因为我能够获得一个 UIImage 以显示在我的 UIImageView 中(即生成的 QR 码图像)。关于 JSON 字符串,二维码生成完美,没有任何问题。我刚刚用一个基本字符串尝试了这个过程,但仍然有同样的问题。 -
如果生成了图像,那么为什么不将图像保存在数据库中呢?为什么是 DocumentsDirectory ? ..
标签: ios swift uiimage qr-code xcode9