如何生成与Snapchat的Snapcode类似的图像并以相同的方式使用?

时间:2015-07-11 14:29:39

标签: ios swift qr-code snapchat scannable-code

我正在构建一个使用QR码连接用户的应用,类似于Snapchat允许用户在Snapchat上互相添加的方式。

我希望使用更加美观的QR码替代品,类似于Snapchat的Snapcode。想知道如何在iOS应用程序中完成它吗?

1 个答案:

答案 0 :(得分:3)

如果您不想使用QRCode ,您必须创建自己的模式以生成/阅读图片。

但也许你可以使用QRCode。

QRCode有error correction level。考虑到它,你仍然可以让你的QRCode更美观,如你所要求的那样。请记住"纠错级别越高,存储容量越小"只要算法可以获得您需要的信息,您就可以自定义图像。

当您生成QRCode图像时,您可以这样做:

Swift 3.1

private enum InputCorrectionLevel: String {
    case low = "L" // 7%
    case medium = "M" // 15%
    case high = "Q" // 25%
    case ultra = "H" // 30%
}

private enum QRCodeGenerationError {
    case initializingFilter
    case applyingFilter
}

func qrCode(from string: String, withSize frameSize: CGSize) throws -> CIImage {
    guard let filter = CIFilter(name: "CIQRCodeGenerator") else {
        throw QRCodeGenerationError.initializingFilter
    }

    let data = string.data(using: .isoLatin1, allowLossyConversion: false)
    filter.setValue(data, forKey: "inputMessage")
    filter.setValue(InputCorrectionLevel.low.rawValue, forKey: "inputCorrectionLevel")

    guard let outputImage = filter.outputImage else {
        throw QRCodeGenerationError.applyingFilter
    }

    let scaleX = frameSize.width / outputImage.extent.size.width
    let scaleY = frameSize.height / outputImage.extent.size.height
    let qrCodeCIImage = outputImage.applying(CGAffineTransform(scaleX: scaleX, y: scaleY))
    return qrCodeCIImage
}