2016-07-11 15 views
2

Ich versuche, einen QR-Code aus einem statischen Bild mit Swift zu lesen.Wie scannen Sie ein UIImage für einen QR-Code mit Swift

Ich kann es leicht mit einer Videoquelle lesen, obwohl es für Bilder sehr unterschiedlich zu sein scheint und ich kann nicht zu viele Ressourcen online dafür finden.

Jede Hilfe geschätzt, danke.

+0

zbar ist eine sehr gute Bibliothek, Hör zu. Es sollte diese Funktion haben. – RJE

+0

Sie können dies erreichen, indem Sie die AVCaptureSession-Klasse des AVFoundation-Frameworks in Objective-C oder Swift verwenden. Überprüfen Sie gut erklärt Tutorial von [Appcoda hier] (http://www.appcoda.com/qr-code-reader-swift/) –

+0

@ cod3rite: Ich habe niemanden abstimmen. –

Antwort

0

Sie können einen großen QRCode Scanner mit ZXingObjC machen. Es handelt sich um eine Barcode-Bildverarbeitungsbibliothek, die sowohl für iOS-Geräte als auch für Mac-Anwendungen entwickelt wurde. Es scannt vom Live-Video oder von Bildern in Ihrer Fotobibliothek und unterstützt alle wichtigen QRCode-Formate.

Dies ist nur, um Sie in die richtige Richtung zu starten. Sie benötigen mehr Methoden zum Einrichten der Kamera usw. ZXingObjC enthält Beispielprojekte und es gibt Kamera-Setup-Lösungen in ganz SO, so dass es ziemlich einfach ist.

Sie müssen ZXingObjC-Pods pod 'ZXingObjC' installieren sowie natürlich eine bridging-header.h-Datei erstellen, um die ZXingObjC-Bibliothek verwenden zu können.

ViewController.swift

import UIKit 
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

@IBOutlet weak var labelOutput: UILabel! 
@IBOutlet weak var QRImage: UIImageView! 

var imagePicker = UIImagePickerController() 

// imagePicker delegate is itself (UIImagePickerController) 
override func viewDidLoad() { 
    super.viewDidLoad() 
    imagePicker.delegate = self 
} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
} 

@IBAction func scanQRCode(sender: AnyObject) { 
    imagePicker.sourceType = .PhotoLibrary 
    imagePicker.allowsEditing = false 
    presentViewController(imagePicker, animated: true, completion: nil) 
} 

// set up the picker 
// initialize luminance source, scanning algorithm, decoding of bitmap, reader helpers, decoder 
func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) { 

    let placeHolderImage:UIImage = info[UIImagePickerControllerOriginalImage] as! UIImage 
    QRImage.contentMode = .ScaleAspectFit 
    QRImage.image = placeHolderImage 
    dismissViewControllerAnimated(true, completion: nil) 

    let luminanceSource: ZXLuminanceSource = ZXCGImageLuminanceSource(CGImage: placeHolderImage.CGImage) 
    let binarizer = ZXHybridBinarizer(source: luminanceSource) 
    let bitmap = ZXBinaryBitmap(binarizer: binarizer) 
    let hints: ZXDecodeHints = ZXDecodeHints.hints() as! ZXDecodeHints 
    let QRReader = ZXMultiFormatReader() 

    // throw/do/catch and all that jazz 
    do { 
     let result = try QRReader.decode(bitmap, hints: hints) 
     labelOutput.text = result.text 
    } catch let err as NSError { 
     print(err) 
    } 
} 

// Conform to ZXCaptureDelegate 
func captureResult(capture: ZXCapture!, result: ZXResult!) { 
    // do some stuff 
    return 
} 
} 

Eine Anmerkung: Ab diesem Beitrag gibt es einen bekannten initializer Fehler in der ZXParsedResult.m Datei der Bibliothek. die Bibliothek der Speicherort der Datei in Xcode ist nach der Installation: Project -> Pods -> ZXingObjC -> All -> ZXParsedResult.m

On line 29 Ändern der Objective-C-Code

+ (id)parsedResultWithType:(ZXParsedResultType)type { 
return [[self alloc] initWithType:type]; 
} 

zu

+ (id)parsedResultWithType:(ZXParsedResultType)type { 
return [(ZXParsedResult *)[self alloc] initWithType:type]; 
} 
+0

Ich habe 'ZXingObjC (3.2.1)' installiert. 29. Zeile von 'Project -> Pods -> ZXingObjC -> Alle -> ZXParsedResult.m' wird geschrieben' + (id) parsedResultWithType: (ZXParsedResultType) Typ { return [[ZXParsedResult Alloc] initWithType: type]; } 'aber Bildscan funktioniert nicht. Kannst du mir helfen ?! –

+0

können Sie mir helfen, meinen Fehler zu finden? –