iOS Swift如何在扫描后重新创建条形码图像

时间:2019-06-04 11:29:37

标签: ios swift barcode avcapturesession core-image

我们被问到一个iOS应用,该应用可以检测条形码(可能的类型为code128,code93,code39),并且在检测到之后,我们需要重新创建图像并在主视图中显示条形码。 为了检测条形码,我们使用AVCaptureSession框架,使用CoreImage生成图像。

我能够检测到条形码的字符串值,但是当我尝试获取CIBarcodeDescriptor字段时却显示为nil,因此无法在CoreImage部分中传递此信息。

这是我的代码

检测条形码委托人

public func scannerDelegate(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject],from connection: AVCaptureConnection){

    if let metadataObject = metadataObjects.first{

        guard let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject else{
            return
        }
        //barcode String id
        guard let barcodeStringValue = readableObject.stringValue else{
            return
        }

        //readableObject.descriptor
        guard let descriptor = readableObject.descriptor else{
            return
        }
         //Pass parameters to the caller and stop Capture Session
    }
}

生成条形码图像

    let filterName = descriptor.rawValue
    guard let data = barcodeStringValue.data(using: .ascii),
      let filter = CIFilter(name: filterName) else {
            return nil
    }

    filter.setValue(data, forKey: "inputMessage")

    guard let image = filter.outputImage else {
        return nil
    }

因此,我无法在CIFilter类中传递filterName参数,我针对QRCode测试了此解决方案,并且效果很好,我是否可以通过条形码获得相同的结果?还是应该使用外部库来完成这项工作?

0 个答案:

没有答案