识别图片使用的是ZBar,最初的方案为ZXing,因为ZXing有人在维护,但ZXing识别相册中的二维码图片或本地的图片,有些图片根本就识别不出来,且耗时较长,所以改为使用ZBar。在网上找到一篇文章 再见ZXing 使用系统原生代码处理QRCode ,实测发现在iOS9,iphone4s上传回来的数组为空。代码如下:
//decode
- (NSString *)decodeQRImageWith:(UIImage*)aImage { NSString *qrResult = nil; //iOS8及以上可以使用系统自带的识别二维码图片接口,但此api有问题,在一些机型上detector为nil。 // if (iOS8_OR_LATER) { // CIContext *context = [CIContext contextWithOptions:nil]; // CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:context options:@{CIDetectorAccuracy:CIDetectorAccuracyHigh}]; // CIImage *image = [CIImage imageWithCGImage:aImage.CGImage]; // NSArray *features = [detector featuresInImage:image]; // CIQRCodeFeature *feature = [features firstObject]; // // qrResult = feature.messageString; // } else { ZBarReaderController* read = [ZBarReaderController new]; CGImageRef cgImageRef = aImage.CGImage; ZBarSymbol* symbol = nil; for(symbol in [read scanImage:cgImageRef]) break; qrResult = symbol.data ; return qrResult;}
无图无真相:
14567CBE-E1D2-4FA7-AFA3-8B2037171F38.jpg
dectector的值为nil,也就是说
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:context options:@{CIDetectorAccuracy