1
votes

Comment générer un QRCode avec un certain nombre de détails

Je n'ai pas d'expérience avec le générateur QRCode ni avec le scanner, mais j'ai essayé de générer QRCode à partir d'une chaîne qui est présentée ci-dessous. Je veux le générer avec un certain nombre de valeurs telles que l'adresse de l'emplacement, le nom, le numéro de téléphone portable, le courrier, le site Web, tous les documents. Quelqu'un peut-il m'aider à le faire?

@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)
}


0 commentaires

3 Réponses :


1
votes

Essayez de convertir les détails du Dictionary en données JSON , puis définissez-le sur 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")


0 commentaires

0
votes

Vous pouvez facilement générer du QRCode en envoyant n'importe quelle chaîne à la fonction suivante:

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

}


2 commentaires

Je veux générer le QRCode avec un certain nombre de choses comme l'adresse, le numéro, le nom et plus


J'ai mis à jour ma réponse. Vous pouvez utiliser @Satesh answer pour convertir votre exigence en objet Data, puis vous pouvez transmettre ces données à cette méthode pour générer QRCode



0
votes

J'ai utilisé de cette façon

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!)
}


1 commentaires

Comment est-il préférable de relire ces données? Ainsi, par exemple, j'ajoute une chaîne et une URL dans mon jsonDict. Donc, dans un scénario, je veux simplement ignorer l'URL et utiliser uniquement la chaîne.