Ios CIFilter如何在Swift中生成不可读的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() ->

我在Swift 4中开发了一个iOS应用程序,XCode 9.3,iOS最低版本为10.0,生成QRCodes供另一个应用程序(读卡器应用程序)读取。应用程序正在生产中,QRCode中显示的数据由服务器发送,并且始终是mongo对象(12字节->24位)

问题是,有时(非常罕见)生成的QRCode被破坏(扫描仪或reader应用程序无法读取),但我无法在开发环境中重现。图像由客户发送

QRCode生成器:

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
    }
}
用法

我可以看到两个可能的原因

  • 服务器正在向应用程序随机发送错误数据(可能是无效字符),因此我无法复制它
  • 服务器发送的数据正常,但iOS系统正在随机生成损坏的QR码
  • 案例1:我试图用许多不同的无效字符生成QRCode,但没有一个生成无效QRCode

    案例2:我搜索了很多关于CIFilter QRCodes中可能存在的bug的信息,但没有找到任何关于

    出现问题的图像:

    抱歉图像1和2的质量,它们是手机的照片

    上面图像的服务器值类似于“5073c76a23ce3abf0f000001”,但我不知道发生了什么


    有什么想法吗?

    你应该使用
    isoLatin1
    字符串编码,而不是
    ascii
    谢谢,我会试试,但我还是不能重现不可读的代码。
    imageView.image = "QRCodeString".toQRCode()