【问题标题】:QR Code Generator using CIImage- Swift使用 CIImage-Swift 的二维码生成器
【发布时间】:2017-07-02 22:20:08
【问题描述】:

我现在有一个非常简单的自定义二维码生成器。但是,我想做两件事。

  1. 更改二维码颜色
  2. 更改各个正方形的形状(例如圆角)

如果有人熟悉自定义 QR 码生成,如果您能提供帮助,我将非常高兴。下面是生成器函数的代码:

func generateQRCode() {
        var urlString = Twitter.sharedInstance.firebaseDownloadLink?.absoluteString
        if let rangeOfHTTPS = urlString?.range(of: "https://") {
            urlString?.removeSubrange(rangeOfHTTPS)
        }
        guard var safeString = urlString else {
            return
        }
        safeString = "https://www.twitter.com/card?"+safeString
        log.info("encoded link: \(safeString)")

        let data = safeString.data(using: String.Encoding.ascii)

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

            if let output = filter.outputImage?.applying(transform) {
                let qrCode = UIImage(ciImage: output)

                //let rawImageRef: CGImage = qrCode.cgImage!

                let colorMasking: [CGFloat] = [222, 255, 222, 255, 222, 255]
                UIGraphicsBeginImageContext(qrCode.size)
                var rawImageRef: CGImage = CIContext.init(options: nil).createCGImage(output, from: output.extent)!
                let maskedImageRef = rawImageRef.copy(maskingColorComponents: colorMasking)
                UIGraphicsGetCurrentContext()?.translateBy(x: 0.0, y: qrCode.size.height)
                UIGraphicsGetCurrentContext()!.scaleBy(x: 1.0, y: -1.0)
                UIGraphicsGetCurrentContext()?.draw(maskedImageRef!, in: CGRect(x: 0, y: 0, width: qrCode.size.width, height: qrCode.size.height))
                let result = UIGraphicsGetImageFromCurrentImageContext()
                UIGraphicsEndImageContext()

                qrCodeView = UIImageView(image: result)
                self.backgroundImage.addSubview(qrCodeView!)
                qrCodeView!.frame = CGRect(x: 96, y: 125, width: 180, height: 180)
            }
        }
    }

任何帮助将不胜感激。提前非常感谢!

干杯,西奥

【问题讨论】:

  • 我曾经尝试过这种方法,但无法找到圆方格的方法。
  • @JonRose 似乎 twitter 已经在他们的应用程序中本地完成了它,因为他们没有列出他们使用 API ......一定是一种方式,对吧?

标签: ios iphone swift xcode core-image


【解决方案1】:

我有部分解决方案。我会解释我有什么,这样你就可以更进一步。我相信使用CIFilter 是一个死胡同,因为它只会给你最终的图像,然后你必须回去解构和修改它。对于像颜色这样的简单更改,这很容易,但是将每个框更改为其他东西就很难了。

因此,您可以使用开源库来获取 QR 码应该是什么样子的实际位图,而不是使用 CIFilter。如果您查看 IOS 的 QR 代码库,其中大多数使用 CIFilter - 这不是我们想要的。我发现https://github.com/moqod/ios-qr-code-encoder实际上使用了一个真正生成二维码数据的库。

我能够修改它来为每个盒子(而不是盒子)绘制我选择的图像,并且能够获得非常好的结果。当我有机会时,我会上传代码更改,但老实说,这并不难,任何人都应该能够做到。

就快速完成而言,我认为这不是一个大问题。有已知的方法可以将 Objective-c 代码连接到 swift,所以它应该是可行的。

【讨论】:

  • 非常感谢。生病检查一下,如果有效,请回复您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 2018-09-03
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
相关资源
最近更新 更多