Ios CIFilter如何在Swift中生成不可读的QRCode?
我在Swift 4中开发了一个iOS应用程序,XCode 9.3,iOS最低版本为10.0,生成QRCodes供另一个应用程序(读卡器应用程序)读取。应用程序正在生产中,QRCode中显示的数据由服务器发送,并且始终是mongo对象(12字节->24位) 问题是,有时(非常罕见)生成的QRCode被破坏(扫描仪或reader应用程序无法读取),但我无法在开发环境中重现。图像由客户发送 QRCode生成器:Ios CIFilter如何在Swift中生成不可读的QRCode?,ios,swift,qr-code,Ios,Swift,Qr Code,我在Swift 4中开发了一个iOS应用程序,XCode 9.3,iOS最低版本为10.0,生成QRCodes供另一个应用程序(读卡器应用程序)读取。应用程序正在生产中,QRCode中显示的数据由服务器发送,并且始终是mongo对象(12字节->24位) 问题是,有时(非常罕见)生成的QRCode被破坏(扫描仪或reader应用程序无法读取),但我无法在开发环境中重现。图像由客户发送 QRCode生成器: extension String { func toQRCode() ->
extension String {
func toQRCode() -> UIImage?{
let data = self.data(using: String.Encoding.ascii)
if let filter = CIFilter(name: "CIQRCodeGenerator"), let colorFilter = CIFilter(name: "CIFalseColor") {
filter.setValue(data, forKey: "inputMessage")
filter.setValue("H", forKey: "inputCorrectionLevel")
colorFilter.setValue(filter.outputImage, forKey: "inputImage")
colorFilter.setValue(CIColor(red: 1, green: 1, blue: 1, alpha: 0), forKey: "inputColor1") // Background
colorFilter.setValue(CIColor.init(red: 0.12, green: 0.13, blue: 0.15), forKey: "inputColor0")
let transform = CGAffineTransform(scaleX: 10, y: 10)
if let output = colorFilter.outputImage?.transformed(by: transform) {
return UIImage(ciImage: output)
}
}
return nil
}
}
用法
我可以看到两个可能的原因
有什么想法吗?你应该使用
isoLatin1
字符串编码,而不是ascii
谢谢,我会试试,但我还是不能重现不可读的代码。
imageView.image = "QRCodeString".toQRCode()