iOS 条码及二维码扫描(从相册中读取条形码/二维码) 以及扫码遇到的问题
来源:互联网 发布:知乎 两性健康的网站 编辑:程序博客网 时间:2024/04/28 15:02
文章重点介绍如何解决,从手机相册中读取条形码和二维码的问题
1.扫码. 网上有特别的关于iOS扫码的代码和示例,其中扫码主要使用的是自带的AVFoundation类.这里就不细说了,要注意的是如何设置扫描区域,识别区域(这个值是按比例0~1设置,而且X、Y要调换位置,width、height调换位置)
//创建输出流AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init];//设置识别区域 (这个值是按比例0~1设置,而且X、Y要调换位置,width、height调换位置) output.rectOfInterest = CGRectMake(Y /ScreenHeight, X /ScreenWidth, height /ScreenHeight, width /ScreenWidth)
2. 获取相册中的二维码图片,用CIDetector类,但是这个类只能识别二维码图片,条形码目前暂不支持
//要实现两个代理方法<UIImagePickerControllerDelegate,UINavigationControllerDelegate>
-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ // 创建探测器 CIDetectorTypeQRCode CIDetector *detector = [CIDetector detectorOfType: CIDetectorTypeText context:nil options:@{CIDetectorAccuracy: CIDetectorAccuracyLow}]; [picker dismissViewControllerAnimated:YES completion:^{ }]; // 取出选中的图片 UIImage *pickImage = info[UIImagePickerControllerOriginalImage]; // 设置数组,放置识别完之后的数据 NSArray *features = [detector featuresInImage:[CIImage imageWithData:UIImagePNGRepresentation(pickImage)]]; // 判断是否有数据(即是否是二维码) if (features.count >= 1) { // 取第一个元素就是二维码所存放的文本信息 CIQRCodeFeature *feature = features[0]; NSString *scannedResult = feature.messageString; // 触发回调 [self getScanDataString:scannedResult]; }else{ [self getScanDataString:@"未识别图片中的二维码"]; }}
用CIDetector类读取相册中的二维码遇到的问题是手机截屏的图片可以读取成功,手机拍照的图片取出成功率比较低。并且不支持读取条形码。
解决办法:读取相册中的二维码/条形码,使用ZBarSDK,下面介绍一下怎么在工程中引入ZBarSDK,因为我的Demo工程没有使用CocoaPods去管理第三方库,所以介绍手动将ZBarSDK导入工程并配置。步骤一.在工程中建一个Frameworks文件夹将ZBarSDK文件夹导入,如图
步骤二.在工程中添加依赖库,如图:
步骤三.导入头文件并调用对应方法。
#import "ZBarSDK.h"
/** * 获取相册中的二维码图片 */- (void)getQRcodeImage { // ZBarsSDK 初始化 ZBarReaderController *imagePicker = [ZBarReaderController new]; imagePicker.showsHelpOnFail = NO; // 禁止显示读取失败页面 imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; imagePicker.delegate = self; imagePicker.allowsEditing = YES; [self presentViewController:imagePicker animated:YES completion:nil];}/** * 选中图片的回调 */-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{ id<NSFastEnumeration> results = [info objectForKey:ZBarReaderControllerResults]; ZBarSymbol *symbol = nil; for(symbol in results) { break; } [picker dismissViewControllerAnimated:YES completion:^{ //二维码字符串 NSString *QRCodeString = symbol.data; // 触发回调 [self getScanDataString:QRCodeString]; }];}/** * 读取二维码/条码失败的回调 */-(void)readerControllerDidFailToRead:(ZBarReaderController *)reader withRetry:(BOOL)retry{ if (retry) { //retry == 1 选择图片为非二维码。 [self dismissViewControllerAnimated:YES completion:^{ [self getScanDataString:@"未发现二维码/条码"]; }]; } return; }
这样就可以成功的读取手机相册中的条形码和二维码图片了。分享ZBarSDK的下载地址
0 0
- iOS 条码及二维码扫描(从相册中读取条形码/二维码) 以及扫码遇到的问题
- iOS 自带二维码识别(识别二维码,条形码以及从相册中选择图片进行识别)
- Unity3d 二维码功能(扫码及相册读取,适配ios与android)
- ios二维码条码扫描问题
- OC - 原生扫码(扫描二维码,条形码)
- iOS中二维码,条形码等的扫描
- iOS 7以上原生二维码、条码扫描(ZXingObjC相册读取)
- iOS 二维码扫面 相册图片二维码读取和二维码的生成
- iOS原生二维码生成与扫描以及条形码的扫描
- iOS - 二维码、条码扫描
- iOS 二维码,条形码扫描
- IOS扫描二维码条形码
- ios 二维码、条形码扫描
- 二维码、条形码的扫描
- ionic 二维码的扫描(包括从本地相册读取和通过摄像头读取)
- iOS 二维码的扫描使用,以及图片预览,类似于相册
- iOS 二维码、条码扫描(带UI)
- iOS 原生的二维码/条形码扫描
- sequence_loss_by_example(logits, targets, weights)
- Android的设计架构MVP,MVC
- Join操作基本:外连接、自然连接、内连接
- springmvc无法接收uploadify插件上传的数据
- 多线程之GCD,NSOperation和NSOperationQueue,NSThread
- iOS 条码及二维码扫描(从相册中读取条形码/二维码) 以及扫码遇到的问题
- Swift 之 UIACtionSheet
- wex5 实战 框架拓展之1 公共data组件(Data)
- OpenCV3.0 Examples学习笔记(1)-contours2.cpp-通过findContours 函数实现轮廓提取
- PAT乙级 1009
- Hadoop的单机伪分布式搭建和运行第一个WordCount程序
- 网络程序设计课程项目总结
- 三大范式+BCNF
- rich:datatable和 rich:subtable区别