我正在尝试创建一个 VCard,然后将其转换为 QR 码。在我在 VCard 中添加 base64 照片字符串之前,一切都运行良好。在这种情况下,由于字符串的大小,二维码生成失败。我尝试了一些技巧,但似乎没有任何效果。
下面是我用二维码生成 VCard 的代码。
func textBasedVCard()-> Data?{
var string = "BEGIN:VCARD\nVERSION:3.0\n"
string += "FN:\(self.firstnameTextField.text!)\nN:\(self.lastnameTextField.text!)\nORG:\(self.companyTextField.text!)\nTITLE:\(self.titleTextField.text!)\nTEL;TYPE=WORK,VOICE:\(self.phoneNumberTextField.text!)\nADR;TYPE=WORK:;;\(self.adressTextField.text!)\nPOSTALCODE:\(self.postcodeTextField.text!)\nCITY:\(self.cityTextField.text!)\nitem3.URL:\(self.linkedinTextField.text!)\nitem4.URL:\(self.twitterTextField.text!)\nEMAIL;TYPE=PREF,INTERNET:\(self.emailAdressTextField.text!)\nPHOTO;ENCODING=BASE64;TYPE=JPEG:\(self.base64ImageString)\nEND:VCARD"
let utf8str = string.data(using: String.Encoding.utf8)
if let base64Encoded = utf8str?.base64EncodedString(options: .init(rawValue: 0))
{
self.generateQRCode(string: string)
return Data(base64Encoded: base64Encoded)!
}
return nil
}
func generateQRCode(string: String) {
if qrcodeImage == nil {
let data = string.data(using: String.Encoding.ascii, allowLossyConversion: false)
let filter = CIFilter(name: "CIQRCodeGenerator")
filter?.setValue(data, forKey: "inputMessage")
filter?.setValue("Q", forKey: "inputCorrectionLevel")
qrcodeImage = filter?.outputImage
let context:CIContext = CIContext.init(options: nil)
let cgImage:CGImage = context.createCGImage(qrcodeImage, from: qrcodeImage.extent)!
let image:UIImage = UIImage.init(cgImage: cgImage)
self.imageData = UIImagePNGRepresentation(image)! as NSData
print(imageData)
}
}
这是错误
在隐式展开可选值时意外发现 nil
此错误位于 generateQRCode() 中的 cgImage 行上。原因是过滤器什么都没有。即无
如果我从 VCard 中删除照片,那么evertyhting 工作正常。
请帮助 TIA