2.二维码生成

通过滤镜生成CGImage
//2.二维码滤镜
let contentData = self.data(using: String.Encoding.utf8)
let fileter = CIFilter(name: "CIQRCodeGenerator")
fileter?.setValue(contentData, forKey: "inputMessage")
fileter?.setValue("H", forKey: "inputCorrectionLevel")
let ciImage = fileter?.outputImage
//3.颜色滤镜
let colorFilter = CIFilter(name: "CIFalseColor")
colorFilter?.setValue(ciImage, forKey: "inputImage")
colorFilter?.setValue(CIColor(cgColor: QRCodeColor.cgColor), forKey: "inputColor0")// 二维码颜色
colorFilter?.setValue(CIColor(cgColor: QRCodeBgColor.cgColor), forKey: "inputColor1")// 背景色
//4.生成处理
let outImage = colorFilter!.outputImage
let scale = QRCodeSize / outImage!.extent.size.width;
let transform = CGAffineTransform(scaleX: scale, y: scale)
let transformImage = colorFilter!.outputImage!.applying(transform)
通过CGImage生成UIImage
let image = UIImage(ciImage: ciImage)
绘制Logo和边框
// 绘制logo
UIGraphicsBeginImageContextWithOptions(image.size, false, UIScreen.main.scale)
image.draw(in: CGRect(x: 0, y: 0, width: image.size.width, height: image.size.height))
//线框
let logoBorderLineImagae = QRCodeLogo.getRoundRectImage(size: logoWidth, radius: radius, borderWidth: borderLineWidth, borderColor: borderLineColor)
//边框
let logoBorderImagae = logoBorderLineImagae.getRoundRectImage(size: logoWidth, radius: radius, borderWidth: boderWidth, borderColor: borderColor)
logoBorderImagae.draw(in: logoFrame)
let QRCodeImage = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
封装接口:
/**
1.生成二维码
- returns: 黑白普通二维码(大小为300)
*/
func generateQRCode() -> UIImage
/**
2.生成二维码
- parameter size: 大小
- returns: 生成带大小参数的黑白普通二维码
*/
func generateQRCodeWithSize(size:CGFloat?) -> UIImage
/**
3.生成二维码
- parameter logo: 图标
- returns: 生成带Logo二维码(大小:300)
*/
func generateQRCodeWithLogo(logo:UIImage?) -> UIImage
/**
4.生成二维码
- parameter size: 大小
- parameter logo: 图标
- returns: 生成大小和Logo的二维码
*/
func generateQRCode(size:CGFloat?,logo:UIImage?) -> UIImage
/**
5.生成二维码
- parameter size: 大小
- parameter color: 颜色
- parameter bgColor: 背景颜色
- parameter logo: 图标
- returns: 带Logo、颜色二维码
*/
func generateQRCode(size:CGFloat?,color:UIColor?,bgColor:UIColor?,logo:UIImage?) -> UIImage
/**
6.生成二维码
- parameter size: 大小
- parameter color: 颜色
- parameter bgColor: 背景颜色
- parameter logo: 图标
- parameter radius: 圆角
- parameter borderLineWidth: 线宽
- parameter borderLineColor: 线颜色
- parameter boderWidth: 带宽
- parameter borderColor: 带颜色
- returns: 自定义二维码
*/
func generateQRCode(size:CGFloat?,color:UIColor?,bgColor:UIColor?,logo:UIImage?,radius:CGFloat,borderLineWidth:CGFloat?,borderLineColor:UIColor?,boderWidth:CGFloat?,borderColor:UIColor?) -> UIImage
使用
DispatchQueue.global().async {
let image = content.generateQRCodeWithLogo(logo: self.logoImageView.image)
DispatchQueue.main.async(execute: {
self.QRCodeImageView.image = image
})
}










