使用 CIDetector 扫描条形码(一维和二维)

Jaf*_*iff 5 qr-code objective-c ios cidetector

我想从实时摄像头和图像中扫描二维码和条形码。我之前使用ZBar库来扫码。它不扫描特定类型的二维码和条形码。此外,苹果的 AVFoundation 框架在从实时摄像头扫描代码时似乎更加快速和准确。

所以我不想使用ZBar。为了扫描从图库中选取的图像中的代码,我使用 CIDetector。但 CIDetector 似乎无法扫描图像中的条形码。我已经在流 CIDetector 的整个堆栈中搜索了其他条形码类型本机从 UIImage 扫描条形码(即不使用 ZBar)

但我还没有找到使用 CIDetector 扫描从图库中挑选的图像条形码的方法。是否可以使用 CIDetector 从 UIImages 扫描条形码?

不建议其他第三方库。我想使用苹果的默认框架来完成这项工作。

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{

     [picker dismissViewControllerAnimated:YES completion:nil];

     UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
     CIImage *img = [[CIImage alloc]initWithImage:image];

     CIDetector* detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{CIDetectorAccuracy:CIDetectorAccuracyHigh}];
     if (detector) 
    {
        NSArray* featuresR = [detector featuresInImage:img];
        NSString* decodeR;
        for (CIQRCodeFeature* featureR in featuresR) 
        {
            NSLog(@"decode %@ ",featureR.messageString);
            decodeR = featureR.messageString;

            [self showAlertWithTitle:@"Success" withMessage:decodeR];
           return;
         }

    [self showAlertWithTitle:@"Error" withMessage:@"Invalid Image"];
     }

}
Run Code Online (Sandbox Code Playgroud)

Jaf*_*iff 1

到目前为止,苹果的 AVFoundation 框架还没有提供扫描从图像库中选取的条形码的方法。

因此,我通过使用 AVFoundation 框架在实时相机中扫描二维码和条形码来解决我的问题,而当用户从图库中拍摄照片时,我使用 ZBar 框架来扫描二维码和条形码。