Reputation: 21
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
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
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
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