【问题标题】:Create QR code with Numeric encoding type创建数字编码类型的二维码
【发布时间】:2018-03-21 08:14:56
【问题描述】:

我有很长的 int 数字,我想将它编码为 QRCode,使用完全数字类型的编码。现在我使用 CIFilter(name: "CIQRCodeGenerator"),但在这种情况下,我不知道如何选择编码类型。有没有办法创建具有所选编码类型的二维码?

【问题讨论】:

标签: ios swift qr-code


【解决方案1】:

The Apple documentation for CIQRCodeGenerator 表示您应该使用NSISOLatin1StringEncoding (Objective-C) 或String.Encoding.isoLatin1 (Swift) 来编码二维码。

这是一个在 Swift 4 中从给定输入整数生成 UIImage 的快速示例。

enum QRInputEncoding: Int {
    case octal = 8
    case decimal = 10
    case hexadecimal = 16
}

func makeQRImage(input: Int, encoding: QRInputEncoding) -> UIImage? {
    let encoded = String(input, radix: encoding.rawValue)
    print(encoded)
    guard let data = encoded.data(using: .isoLatin1) else {
        return nil
    }
    let filter = CIFilter(name: "CIQRCodeGenerator", withInputParameters: ["inputMessage": data])
    return filter?.outputImage.map(UIImage.init(ciImage:))
}

makeQRImage(input: 100000, encoding: .octal) // prints 303240
makeQRImage(input: 100000, encoding: .decimal) // prints 100000
makeQRImage(input: 100000, encoding: .hexadecimal) // prints 186a0

这允许您更改生成的 QR 码输出,以便阅读器可以读取更少的字符,从而导致相同数字的 QR 码更小。

【讨论】:

  • 现在我也这样做了。但我不确定在这种情况下使用什么类型的编码,数字、字母或 8 位。
  • 我已编辑我的答案,以允许自定义为您的二维码传入的数字的输出编码。前面的例子只输出十进制数,现在也可以选择以 8 和 16 为基数。
【解决方案2】:

这将生成二维码图像并返回

func makeQRImage(inputText: String) -> UIImage {  

            let data = inputText.dataUsingEncoding(NSISOLatin1StringEncoding, allowLossyConversion: false)

            let filter = CIFilter(name: "CIQRCodeGenerator")

            filter.setValue(data, forKey: "inputMessage")
            filter.setValue("Q", forKey: "inputCorrectionLevel")

       return filter.outputImage
}

您可以按照以下代码进行任何其他操作:https://github.com/appcoda/QR-Code-Generator

还有教程:​​https://www.appcoda.com/qr-code-generator-tutorial

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-03
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多