2015-07-11 31 views
13

Buduję aplikację korzystającą z kodu QR do łączenia użytkowników, podobnie jak Snapchat pozwala użytkownikom dodawać się nawzajem w Snapchacie.Jak mogę wygenerować obraz, który będzie podobny do Snapcode Snapchata i będzie używany w taki sam sposób?

Miałem nadzieję, że użyję bardziej estetycznej alternatywy dla kodu QR, podobnie jak Snapcode Snapchata. Masz pomysł, jak to zrobić w aplikacji na iOS?

+0

Wystarczy sprawdzenie w jaki sposób na to poszedł. Czy udało ci się zrobić coś podobnego do kodu snapcode niż używając poniższego rozwiązania? – Chaz

+0

Witam Rohanie, że masz rozwiązanie tego, chcę zbudować to samo. –

+0

Czy znalazłeś coś Rohana? – hyd00

Odpowiedz

3

Jeśli nie chcesz używać kodu QRCode pod numerem, musisz utworzyć własny wzór, aby wygenerować/odczytać obraz.

Ale może ty można użyć kodu QR.

Kod QRCode ma error correction level. Biorąc to pod uwagę, wciąż możesz sprawić, że Twój QRCode będzie wyglądał bardziej estetycznie, o co prosiłeś. Pamiętaj tylko, że "im wyższy poziom korekcji błędów, tym mniejsza pojemność pamięci", możesz dostosować obraz tak długo, jak algorytm może uzyskać potrzebne informacje.

Podczas generowania obrazu QRCode można zrobić to tak:

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 
}