ios swift3.0实现二维码扫描、生成、识别示例代码

2020-01-18 20:52:39于海丽

2.二维码生成

swift3.0二维码扫描,swift3,扫描二维码,ios,swift,二维码生成

通过滤镜生成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
        })

      }