How can I put the brand logo in the QR code?

Viewed 41
extension CIImage {
   /// Combines the current image with the given image centered.
   func combined(with image: CIImage) -> CIImage? {
  guard let combinedFilter = CIFilter(name: "CISourceOverCompositing") else { return nil }
   let centerTransform = CGAffineTransform(translationX: extent.midX - (image.extent.size.width / 2), y: extent.midY - (image.extent.size.height / 2))
  combinedFilter.setValue(image.transformed(by: centerTransform), forKey: "inputImage")
 combinedFilter.setValue(self, forKey: "inputBackgroundImage")
   return combinedFilter.outputImage!
   }
}

/// Creates a QR code for the current URL in the given color.
 func qrImage(using color: UIColor, logo: UIImage? = nil) -> CIImage? {
   let tintedQRImage = qrImage?.tinted(using: color)
       guard let logo = logo?.cgImage else {
            return tintedQRImage
    }
     return tintedQRImage?.combined(with: CIImage(cgImage: logo))
 }

 /// Returns a black and white QR code for this URL.
   var qrImage: CIImage? {
       guard let qrFilter = CIFilter(name: "CIQRCodeGenerator") else { return nil }
      let qrData = absoluteString.data(using: String.Encoding.ascii)
     qrFilter.setValue(qrData, forKey: "inputMessage")

   let qrTransform = CGAffineTransform(scaleX: 12, y: 12)
    return qrFilter.outputImage?.transformed(by: qrTransform)
  }

I created the qr code in the color I want, but when I put the logo, the logo comes over the qr code and a very ugly image is formed. As in the first picture.How can I create a space in the middle of the qr and put the logo in that space?

private func configureQrCode() {
    let qrCodeColor = UIColor.qrColor
    let qrCodeLogo = UIImage(named: "signinlogo")
    guard let qrURLImage = URL(string: QRCodeConstants.qrLink)?.qrImage(using:   qrCodeColor, logo: qrCodeLogo) else { return }
   qrCode.image = UIImage(ciImage: qrURLImage)
 }

[![][1]][1] [![I want it to look like this, but it's like the one above][2]][2]

1 Answers
Related