Swift5.x 二维码生成

Swift5.x 二维码生成

    //:MARK: ====== 二维码生成   size最小:{115, 115}
    public class func createQRForString(qrString: String, qrImageNamed: String? = nil) -> UIImage {
        // 将字符串转换为二进制
        let data = qrString.data(using: String.Encoding.utf8, allowLossyConversion: false)
        let filter = CIFilter(name: "CIQRCodeGenerator")!
        filter.setValue(data, forKey: "inputMessage")
        filter.setValue("H", forKey: "inputCorrectionLevel")
        let qrCIImage = filter.outputImage
        let colorFilter = CIFilter(name: "CIFalseColor")!
        colorFilter.setDefaults()
        colorFilter.setValue(qrCIImage, forKey: "inputImage")
        colorFilter.setValue(CIColor(red: 0, green: 0, blue: 0), forKey: "inputColor0")
        colorFilter.setValue(CIColor(red: 1, green: 1, blue: 1), forKey: "inputColor1")

        let codeImage = UIImage(ciImage: colorFilter.outputImage!.transformed(by: CGAffineTransform(scaleX: 5, y: 5)))

        //内嵌logo
        if qrImageNamed != nil {
            if let iconImage = UIImage(named: qrImageNamed!) {
                let rect = CGRect.init(x: 0, y: 0, width: codeImage.size.width, height: codeImage.size.height)

                UIGraphicsBeginImageContext(rect.size)
                codeImage.draw(in: rect)
                let avatarSize = CGSize.init(width: rect.size.width / 4, height: rect.size.height / 4)
                let x = (rect.width - avatarSize.width) / 2
                let y = (rect.height - avatarSize.height) / 2

                iconImage.draw(in: CGRect(x: x, y: y, width: avatarSize.width, height: avatarSize.height))

                let resultImage = UIGraphicsGetImageFromCurrentImageContext()

                UIGraphicsEndImageContext()
                return resultImage!
            }
        }
        return codeImage
    }

使用了 filter.setValue("H", forKey: "inputCorrectionLevel") 后,二维码图片本身会变的很大。

inputCorrectionLevel 是一个单字母(@”L”, @”M”, @”Q”, @”H” 中的一个),表示不同级别的容错率,默认为 @”M”.

QR码有容错能力,QR码图形如果有破损,仍然可以被机器读取内容,最高可以到7%~30%面积破损仍可被读取,相对而言,容错率愈高,QR码图形面积愈大。
所以一般折衷使用15%容错能力。

L水平: 7%的字码可被修正.
M水平: 15%的字码可被修正
Q水平: 25%的字码可被修正
H水平: 30%的字码可被修正


你可能感兴趣的:(iOS开发,iOS,二维码,Swift5,Swift)