是否可以从iOS读取二维码的纠错值?
Is it possible to read a QR code's error correction value from iOS?
所有二维码都定义了一个纠错级别,由左下角的两个'bits/pixels'定义(更多细节见here。)虽然我知道如何扫描[=中的二维码26=],我不知道的是如何获得我正在扫描的代码的纠错。
这是必需的,因为我们的应用正在尝试扫描,然后以编程方式重新创建扫描的二维码。
这是我们当前的代码,我们在其中收到成功扫描二维码的通知,但我看不到任何获取特定于二维码的详细信息的方法,只有成功扫描的结果...
extension QRCodeScannerViewController : AVCaptureMetadataOutputObjectsDelegate {
func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
guard let metadataObject = metadataObjects.first,
let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject,
let stringValue = readableObject.stringValue else {
return
}
captureSession.stopRunning()
performSegue(withIdentifier: "ShowResults", sender: stringValue)
}
}
查看文档我还看到 CIQRCodeDescriptor
(https://developer.apple.com/documentation/coreimage/ciqrcodedescriptor) 确实 具有我们正在寻找的值,但我不是确定如何获取要检查的实例。
呸!它就在我面前!
if let qrCodeDescriptor = readableObject.descriptor as? CIQRCodeDescriptor{
switch qrCodeDescriptor.errorCorrectionLevel {
case .levelL : print("L")
case .levelM : print("M")
case .levelH : print("H")
case .levelQ : print("Q")
}
}
所有二维码都定义了一个纠错级别,由左下角的两个'bits/pixels'定义(更多细节见here。)虽然我知道如何扫描[=中的二维码26=],我不知道的是如何获得我正在扫描的代码的纠错。
这是必需的,因为我们的应用正在尝试扫描,然后以编程方式重新创建扫描的二维码。
这是我们当前的代码,我们在其中收到成功扫描二维码的通知,但我看不到任何获取特定于二维码的详细信息的方法,只有成功扫描的结果...
extension QRCodeScannerViewController : AVCaptureMetadataOutputObjectsDelegate {
func metadataOutput(_ output: AVCaptureMetadataOutput, didOutput metadataObjects: [AVMetadataObject], from connection: AVCaptureConnection) {
guard let metadataObject = metadataObjects.first,
let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject,
let stringValue = readableObject.stringValue else {
return
}
captureSession.stopRunning()
performSegue(withIdentifier: "ShowResults", sender: stringValue)
}
}
查看文档我还看到 CIQRCodeDescriptor
(https://developer.apple.com/documentation/coreimage/ciqrcodedescriptor) 确实 具有我们正在寻找的值,但我不是确定如何获取要检查的实例。
呸!它就在我面前!
if let qrCodeDescriptor = readableObject.descriptor as? CIQRCodeDescriptor{
switch qrCodeDescriptor.errorCorrectionLevel {
case .levelL : print("L")
case .levelM : print("M")
case .levelH : print("H")
case .levelQ : print("Q")
}
}