-
Notifications
You must be signed in to change notification settings - Fork 0
How to create a QR image From String
Moisés Córdova edited this page Jun 11, 2020
·
1 revision
extension String {
func qrImage(using color: UIColor) -> CIImage? {
return qrImage?.tinted(using: color)
}
var qrImage: CIImage? {
let data = self.data(using: .ascii, allowLossyConversion: false)
let filter = CIFilter(name: "CIQRCodeGenerator")
filter?.setValue(data, forKey: "inputMessage")
let ciImage = filter?.outputImage
let transform = CGAffineTransform(scaleX: 30, y: 30)
let transformImage = ciImage?.transformed(by: transform)
return transformImage
}
}
extension CIImage {
var transparent: CIImage? {
return inverted?.blackTransparent
}
var inverted: CIImage? {
guard let invertedColorFilter = CIFilter(name: "CIColorInvert") else { return nil }
invertedColorFilter.setValue(self, forKey: "inputImage")
return invertedColorFilter.outputImage
}
var blackTransparent: CIImage? {
guard let blackTransparentFilter = CIFilter(name: "CIMaskToAlpha") else { return nil }
blackTransparentFilter.setValue(self, forKey: "inputImage")
return blackTransparentFilter.outputImage
}
func tinted(using color: UIColor) -> CIImage? {
guard
let transparentQRImage = transparent,
let filter = CIFilter(name: "CIMultiplyCompositing"),
let colorFilter = CIFilter(name: "CIConstantColorGenerator") else { return nil }
let ciColor = CIColor(color: color)
colorFilter.setValue(ciColor, forKey: kCIInputColorKey)
let colorImage = colorFilter.outputImage
filter.setValue(colorImage, forKey: kCIInputImageKey)
filter.setValue(transparentQRImage, forKey: kCIInputBackgroundImageKey)
return filter.outputImage!
}
}let qrText = "My Custom Text"
if let ciImage = qrText.qrImage(using: .darkGray) {
imageView.image = UIImage(ciImage: ciImage)
}