Escanee el qrcode y el código de barras de la camera y la image que seleccionó de la biblioteca de imágenes en swift

Soy un novato con Ios. estoy aprendiendo object rápido y pasado por alto c.

Actualmente, estoy escribiendo una demo con swift y xcode 6.1 que puede escanear código qrcode y código de barras de la camera o una image de la biblioteca de imágenes.

Sé que el marco de AVFoundation admite el escaneo del código de barras y el código de barras, pero solo puede escanear desde la camera.

Busqué y encontré zbarSDK que admite el código de escaneo de la camera y la image. Hago como instrucciones en http://zbar.sourceforge.net/iphone/sdkdoc/ y NSFastEnumeration en Swift (convierte el código a swift). Sin embargo, cuando ejecuto la aplicación, después de elegir la image de la biblioteca, se produce un error.

Este es mi codigo

import UIKit import AVFoundation extension ZBarSymbolSet: SequenceType { public func generate() -> NSFastGenerator { return NSFastGenerator(self) } } class FirstViewController: UIViewController, ZBarReaderDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate { let reader = ZBarReaderController() @IBOutlet weak var lblResult: UILabel! @IBOutlet weak var imgView: UIImageView! override func viewDidLoad() { super.viewDidLoad() reader.delegate = self } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() // Dispose of any resources that can be recreated. } @IBAction func scanCode(sender: AnyObject) { let scanner = reader.scanner scanner.setSymbology(ZBAR_I25, config: ZBAR_CFG_ENABLE, to: 0) reader.modalPresentationStyle = .Popover presentViewController(reader, animated: true, completion: nil) } func imagePickerController(picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [NSObject : AnyObject]) { var results: NSFastEnumeration = info["ZBarReaderControllerResults"] as NSFastEnumeration var symbolFound : ZBarSymbol? // =============== Error here ================== for symbol in results as ZBarSymbolSet { symbolFound = symbol as? ZBarSymbol break } var resultString = NSString(string: symbolFound!.data) println(resultString) } } 

aquí está la image de error introduzca la descripción de la imagen aquí

Estaré muy agradecido si alguien me avisa por qué ocurre un error y cómo solucionarlo, o si hay alguna forma de escanear código con una image usando AVFoundation o una otra biblioteca (con un documento detallado y una muestra) para hacer esto (por favor, dé instrucciones detalladas porque acabo de aprender rápido y ios durante 3 semanas). Gracias.

También estaba buscando leer un código QR de una image y sin Zbar.

Puede usar CIDetector en CIDetector lugar. Encontré la solución aquí . En mi caso, tomo una foto de la biblioteca (se supone que es un código QR, aquí qrcodeImg ) y luego la convierto en CIImage para ser descodificada por CIDetector .

 qrCodeImageView.image=qrcodeImg let detector:CIDetector=CIDetector(ofType: CIDetectorTypeQRCode, context: nil, options: [CIDetectorAccuracy:CIDetectorAccuracyHigh]) let ciImage:CIImage=CIImage(image:qrcodeImg) var qrCodeLink="" let features=detector.featuresInImage(ciImage) for feature in features as! [CIQRCodeFeature] { qrCodeLink += feature.messageString } if qrCodeLink=="" { print("nothing") }else{ print("message: \(qrCodeLink)") } 

Para Swift3 siguiente código debería funcionar para que obtenga el resultado de ZBarSDK

 extension ZBarSymbolSet: Sequence { public func makeIterator() -> NSFastEnumerationIterator { return NSFastEnumerationIterator(self) } } func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { // ADD: get the decode results let results: NSFastEnumeration = info[ZBarReaderControllerResults] as! NSFastEnumeration var symbolFound : ZBarSymbol? for symbol in results as! ZBarSymbolSet { symbolFound = symbol as? ZBarSymbol break } let resultString = symbolFound!.data print(resultString) }