CIQRCodeGenerator produces wrong image

There is a problem with QR code generation using the following simple code:

override func viewDidLoad() {
    super.viewDidLoad()
    
    let image = generateQRCode(from: "Hacking with Swift is the best iOS coding tutorial I've ever read!")
    imageView.image = image
}

func generateQRCode(from string: String) -> UIImage? {
    let data = string.data(using: String.Encoding.ascii)

    if let filter = CIFilter(name: "CIQRCodeGenerator") {
        filter.setValue(data, forKey: "inputMessage")
        let transform = CGAffineTransform(scaleX: 5.3, y: 5.3)

        if let output = filter.outputImage?.transformed(by: transform) {
            return UIImage(ciImage: output)
        }
    }
    return nil
}

This code produces the following image:

enter image description here

But when magnifying any corner marker, we can see the difference in border thickness:

enter image description here

I. e. not every scale value produces correct final image. How to fix it out?

Upvotes: 0

Views: 377

Answers (1)

Peter O.
Peter O.

Reputation: 32878

The behavior you show is expected whenever you use a non-integer scale, such as 5.3. If having consistent marker widths is something you care about, use only integer scales, such as 5 or 6.

Upvotes: 1

Related Questions