2017-12-14 5 views
0
func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) { 
    captureSession.stopRunning() 

    if let metadataObject = metadataObjects.first { 
     let readableObject = metadataObject as! AVMetadataMachineReadableCodeObject; 

     AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) 
     found(code: readableObject.stringValue!); 
    } 
} 

Die obige Funktion funktioniert perfekt, aber ich habe versucht, gescannte Ergebnisse zu bekommen und es als Foto im Gerät zu schreiben, aber es scheint unmöglich für jetzt.Wie scannen Barcode-Foto mit Swift 3?

Antwort

0

Die Vorgehensweise ist mit CoreImage. Wenn Sie die readableObject.stringValue erhalten, erzeugen Sie das Bild mit dem Filter CICode128BarcodeGenerator.

Also, in Ihrem Beispiel:

func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputMetadataObjects metadataObjects: [Any]!, from connection: AVCaptureConnection!) { 
    captureSession.stopRunning() 

    if let metadataObject = metadataObjects.first { 
     let readableObject = metadataObject as! AVMetadataMachineReadableCodeObject; 

     let barcodeFilter = CIFilter(name: "CICode128BarcodeGenerator") 
     barcodeFilter?.setValue(readableObject.stringValue!.data(using: .ascii), forKey: "inputMessage") 

     let image = UIImage(ciImage: (barcodeFilter?.outputImage)!) 

     AudioServicesPlaySystemSound(SystemSoundID(kSystemSoundID_Vibrate)) 
     found(code: readableObject.stringValue!); 
    } 
} 

zu import CoreImage am Anfang der Datei bleiben.

+0

Gibt es eine Möglichkeit? Ist es möglich, wenn ich das gescannte Bild von der Kamera speichere? – Totally

+0

Ich verstehe nicht, was du meinst. Möchten Sie den Barcode-String aus einem Bild nehmen? Oder möchten Sie den Teil des Bildes speichern? – barbarity

+0

Ich möchte den Teil des gescannten Barcode-Bildes speichern. – Totally