Подтвердить что ты не робот

Как я могу сгенерировать изображение, которое будет похоже на Snapchat Snapchat и будет использоваться таким же образом?

Я создаю приложение, которое использует QR-код для подключения пользователей, подобно тому, как Snapchat позволяет пользователям добавлять друг друга на Snapchat.

Я надеялся использовать более эстетически приятную альтернативу QR-коду, что-то похожее на Snapcode Snapchat. Любая идея о том, как это можно сделать в приложении iOS?

4b9b3361

Ответ 1

Если вы не хотите использовать QRCode вообще, вам придется создать свой собственный шаблон для создания/чтения изображения.

Но, возможно, вы можете использовать QRCode.

QRCode имеет уровень исправления ошибок. Учитывая это, вы все равно можете сделать свой 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
}