iOS相册图片二维码识别

前言:最近客户要求开发一个功能,类似微信长按图片识别图片中的二维码,一开始我使用了ZXingObjC,但是完成后被测试出有些二维码识别不了,所以只能另寻它法,之后更换为苹果系统自带的识别图片二维码的功能,但是这必须在iOS 8.0+才可使用,客户又要求必须支持iOS 7.0,于是我又写了一个Zbar识别图片二维码,但是Zbar还是有部分二维码识别不了。经过测试,最后我的解决方法是,iOS 8.0以上,使用系统自带的图片二维码识别,iOS 8.0以下使用 ZXingObjC + Zbar,这样基本上解决各种不同二维码的扫描问题。


实现方法:

1.IOS原生图片二维码识别(主要方法):

- (void)scanQRCode:(UIImage *)image {
    
    CIDetector*detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{ CIDetectorAccuracy : CIDetectorAccuracyHigh }];
    NSArray *features = [detector featuresInImage:[CIImage imageWithCGImage:image.CGImage]];
    for (int index = 0; index < [features count]; index ++) {
        CIQRCodeFeature *feature = [features objectAtIndex:index];
        NSString *scannedResult = feature.messageString;
        NSLog(@"result:%@",scannedResult);
    }
}


2.ZXingObjC

由于本文主要介绍二维码图片的识别,本处只给出二维码识别主要代码.

- (void)scanQRCode:(UIImage *)image {
    
    CGImageRef imageToDecode=[image CGImage];
    
    ZXLuminanceSource * source = [[ZXCGImageLuminanceSource alloc] initWithCGImage:imageToDecode];
    ZXBinaryBitmap * bitmap = [ZXBinaryBitmap binaryBitmapWithBinarizer:[ZXHybridBinarizer binarizerWithSource:source]];
    NSError *error = nil;
    ZXDecodeHints *hints = [ZXDecodeHints hints];
    ZXMultiFormatReader * reader = [ZXMultiFormatReader reader];
    ZXResult *result = [reader decode:bitmap hints:hints error:&error];
    
    if (result) {
        NSString *contents = result.text;
        NSLog(@"%@",contents);
    }
}


3.Zbar的使用

由于本文主要介绍二维码图片的识别,本处只给出二维码图片识别主要代码。

- (void)scanQRCode:(UIImage *)image {
    
    UIImage *image = info[UIImagePickerControllerOriginalImage];
    
    ZBarReaderController* read = [ZBarReaderController new];
    
    read.readerDelegate = self;
    
    CGImageRef cgImageRef = image.CGImage;
    
    ZBarSymbol* symbol = nil;
    
    for(symbol in [read scanImage:cgImageRef]) {
        NSString *qrText = symbol.data ;
        NSLog(@"result:%@",qrText);
    }
}


测试情况:
本人找了几个二维码图片进行了测试(二维码图片如下):

结果:

1.IOS原生图片二维码识别全部都能识别出来,而且效率最高.

2.ZXingObjC识别不出下面的第三张和第七张

3.Zbar识别不出下面的第六张

4.iOS原生图片识别和Zbar图片识别,在一张图片上有多个二维码的情况下能同时识别出来,ZXingObjC方法只能识别出其中的一个。

iOS相册图片二维码识别_第1张图片iOS相册图片二维码识别_第2张图片iOS相册图片二维码识别_第3张图片iOS相册图片二维码识别_第4张图片iOS相册图片二维码识别_第5张图片iOS相册图片二维码识别_第6张图片iOS相册图片二维码识别_第7张图片iOS相册图片二维码识别_第8张图片


你可能感兴趣的:(IOS,ios,二维码,图片)