Swapna
Swapna

Reputation: 21

How to generate a QRCode with number of details

I don't have experience with QRCode generator as well as scanner, but I tried to generate QRCode from a string which is presented below. I want to generate it with number of values like address of location, name, mobile number, mail, website, any documents. Can anyone help me to do this.

@IBAction func generate(_ sender: Any) {
    if let mystring = mytextfield.text       {

        let data = mystring.data(using: .ascii, allowLossyConversion: false)
        let filter = CIFilter(name: "CIQRCodeGenerator")
        filter?.setValue(data, forKey: "InputMessage")
        let ciImage = filter?.outputImage
        let  transform = CGAffineTransform(scaleX: 10, y: 10)
        let transformimage = ciImage?.transformed(by: transform)
        let image = UIImage(ciImage: transformimage!)
        img.image=image
        saveimg.isEnabled=true
    }


}

@IBAction func saveimage(_ sender: Any) {
    screenshotmethod()
}
func screenshotmethod(){
    let layer = UIApplication.shared.keyWindow!.layer
    let scale = UIScreen.main.scale
    UIGraphicsBeginImageContextWithOptions(layer.frame.size, false, scale)
    layer.render(in: UIGraphicsGetCurrentContext()!)
    let screenshot = UIGraphicsGetImageFromCurrentImageContext()

    UIGraphicsEndImageContext()

    UIImageWriteToSavedPhotosAlbum(screenshot!, nil, nil, nil)
}

Upvotes: 1

Views: 1123

Answers (3)

Hasan Batuhan Kurt
Hasan Batuhan Kurt

Reputation: 281

I used this way

private func generateQRCode(){
    var jsonDict = [String: Any]()
    jsonDict.updateValue("Your_Name", forKey: "name")
    jsonDict.updateValue("1234567890", forKey: "number")
    guard let jsonData = try? JSONSerialization.data(withJSONObject: jsonDict, options: [.prettyPrinted]) else {
        return
    }
    let filter = CIFilter(name: "CIQRCodeGenerator")
    filter?.setValue(jsonData, forKey: "InputMessage")
    let qrTransform = CGAffineTransform(scaleX: 12, y: 12)
    let qrImage = filter?.outputImage?.transformed(by: qrTransform)
    img_ticket_qr.image = UIImage(ciImage: qrImage!)
}

Upvotes: 0

Rameez
Rameez

Reputation: 412

You can easily generate QRCode by sending any string to following function:

private func generateQRCode(from data: Data) -> UIImage? {

    if let filter = CIFilter(name: "CIQRCodeGenerator") {
        filter.setValue(data, forKey: "inputMessage")
        let transform = CGAffineTransform(scaleX: 10, y: 10)
        if let output = filter.outputImage?.transformed(by: transform) {
            return UIImage(ciImage: output)
        }
    }
    return nil

}

Upvotes: 0

Sateesh Yemireddi
Sateesh Yemireddi

Reputation: 4409

Try to convert the details from Dictionary into JSON data and then set it to CIFilter.

var jsonDict = [String: Any]()
jsonDict.updateValue("Your_Name", forKey: "name")
jsonDict.updateValue("1234567890", forKey: "number")
guard let jsonData = try? JSONSerialization.data(withJSONObject: jsonDict, options: [.prettyPrinted]) else {
    return
}
let filter = CIFilter(name: "CIQRCodeGenerator")
filter?.setValue(jsonData, forKey: "InputMessage")

Upvotes: 1

Related Questions