import UIKit
public extension UIImage {
public class func createQRCode(code: String, width: CGFloat, height: CGFloat) -> UIImage? {
let data = code.data(using: String.Encoding.isoLatin1, allowLossyConversion: false)
if let filter = CIFilter(name: "CIQRCodeGenerator") {
filter.setValue(data, forKey: "inputMessage")
filter.setValue("H", forKey: "inputCorrectionLevel")
// inputCorrectionLevel 是一个单字母(@"L", @"M", @"Q", @"H" 中的一个),表示不同级别的容错率,默认为 @"M"
// 错误修正容量 L水平 7%的字码可被修正
// M水平 15%的字码可被修正
// Q水平 25%的字码可被修正
// H水平 30%的字码可被修正
// 所以很多二维码的中间都有头像之类的图片但仍然可以识别出来就是这个原因
if let QRCodeImage = filter.outputImage {
//消除模糊
let scaleX = width/QRCodeImage.extent.size.width
let scaleY = height/QRCodeImage.extent.size.height
let transformedImage = QRCodeImage.applying(CGAffineTransform.init(scaleX: scaleX, y: scaleY))
return UIImage(ciImage: transformedImage)
} else {
return nil
}
}else {
return nil
}
}
}
网友评论