識別圖片使用的是ZBar,最初的方案為ZXing,因為ZXing有人在維護,但ZXing識別相冊中的二維碼圖片或本地的圖片,有些圖片根本就識別不出來,且耗時較長,所以改為使用ZBar。在網(wǎng)上找到一篇文章 再見ZXing 使用系統(tǒng)原生代碼處理QRCode ,實測發(fā)現(xiàn)在iOS9,iphone4s上傳回來的數(shù)組為空。代碼如下:
//decode
- (NSString *)decodeQRImageWith:(UIImage*)aImage { NSString *qrResult = nil; //iOS8及以上可以使用系統(tǒng)自帶的識別二維碼圖片接口,但此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