iOS QRcode识别及相册图片二维码读取识别
對二維碼的處理及系統原生API掃描、 Zbar掃描和Zing掃描 比較
iOS原生API
系統掃描的效率是最高,反正包括各種你見過的沒見過的碼,但是有一點我不是很清楚 iOS7 掃描二維碼可以,但從相冊照片讀取二維碼蘋果不支持,必須是iOS8+。
https://github.com/yannickl/QRCodeReaderViewController
https://github.com/zhengjinghua/MQRCodeReaderViewController
這兩個例子已經寫的非常清楚了
// 對于識別率的精度 就是屏幕有波浪一樣[self.captureSession setSessionPreset:AVCaptureSessionPresetHigh];// 改成了 降低采集頻率[self.captureSession setSessionPreset:AVCaptureSessionPreset640x480];不知道 有什么好的方法
ZXing 和 ZBar
具體代碼 我就不在這里寫了,Demo里 都寫了,而且百度谷歌千篇一律,說說ZXing的一些用到的特點:
- 對那種小圓點的二維碼 ZXing和原生API 都是支持的,而ZBar 貌似不是支持的,反正我沒搞定。
- ZXing 現在還在繼續維護 ZBar 而已經停止了
- ZXing 可以識別圖片中多個二維碼
ZBar中的識別率 本人覺得還是比較低
//ZBar 中對 圖片中二維碼 識別UIImage * aImage = ZBarReaderController *read = [ZBarReaderController new];CGImageRef cgImageRef = aImage.CGImage;ZBarSymbol* symbol = nil;for(symbol in [read scanImage:cgImageRef]){qrResult = symbol.data ;NSLog(@"qrResult = symbol.data %@",qrResult);}ZXing 對圓點二維碼的支持 及能夠識別圖片中多個二維碼
// ZXing 只識別單個二維碼UIImage *image = ZXCGImageLuminanceSource *source = [[ZXCGImageLuminanceSource alloc] initWithCGImage:image.CGImage]; ZXHybridBinarizer *binarizer = [[ZXHybridBinarizer alloc] initWithSource: source];ZXBinaryBitmap *bitmap = [[ZXBinaryBitmap alloc] initWithBinarizer:binarizer];NSError *error;id<ZXReader> reader; if (NSClassFromString(@"ZXMultiFormatReader")) {reader = [NSClassFromString(@"ZXMultiFormatReader") performSelector:@selector(reader)];}ZXDecodeHints *_hints = [ZXDecodeHints hints];ZXResult *result = [reader decode:bitmap hints:_hints error:&error];if (result == nil) {NSLog(@"無QRCode");return;}NSLog(@"QRCode = %d,%@",result.barcodeFormat,result.text);ZXing 識別圖片中多個二維碼
UIImage *image = #需要識別的圖片# ZXCGImageLuminanceSource *source = [[ZXCGImageLuminanceSource alloc] initWithCGImage:image.CGImage]; ZXHybridBinarizer *binarizer = [[ZXHybridBinarizer alloc] initWithSource: source];ZXBinaryBitmap *bitmap = [[ZXBinaryBitmap alloc] initWithBinarizer:binarizer];ZXDecodeHints *hints = [ZXDecodeHints hints];NSError *error = nil;ZXQRCodeMultiReader * reader2 = [[ZXQRCodeMultiReader alloc]init];NSArray *rs = [reader2 decodeMultiple:bitmap error:&error];// 或者 NSArray *rs =[reader2 decodeMultiple:bitmap hints:hints error:&error];NSLog(@" err = %@",error);for (ZXResult *resul in rs) {NSLog(@" ---%@",resul.text);}后面 就看你需求了
iOS WebView中 長按二維碼的識別
思路:
本人目前用的是 第二種方式。求大神教我第三種...
我在TOWebViewController?做了類擴展
基本就可以了。
- 終于找到取 webView 緩存的圖片的方法了。 用的是 NSURLProtocol 方式,在github上找了一個?RNCachingURLProtocol,基本原理是:webView 在處理請求的過程中會調用
URLProtocol 把webView請求返回來的 data 用壓縮的方式的存儲在 cache的文件夾下, 發出請求的時候會先去讀取緩存。本人對 RNCachingURLProtocol 做過修改 具體請看Demo
- 轉載請注明 作者:好迪?文章地址
- 水平有限 歡迎批評指正評論
Demo地址
https://github.com/cuiwe000/QRCodeDemo.git
總結
以上是生活随笔為你收集整理的iOS QRcode识别及相册图片二维码读取识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: FOB价格计算
- 下一篇: IOS开发之证书共享(团队协同开发)