iOS 条码及二维码扫描(从相册中读取条形码/二维码)及扫码过程中遇到的坑

所属分类: 软件编程 / IOS 阅读数: 1547
收藏 0 赞 0 分享

文章重点介绍如何解决,从手机相册中读取条形码和二维码的问题

1.扫码.

网上有特别的关于iOS扫码的代码和示例,其中扫码主要使用的是自带的AVFoundation类.这里就不细说了,要注意的是如何设置扫描区域,识别区域(这个值是按比例0~1设置,而且X、Y要调换位置,width、height调换位置)

<span style="font-size:14px;">//创建输出流 
AVCaptureMetadataOutput * output = [[AVCaptureMetadataOutput alloc]init]; 
 //设置识别区域 (这个值是按比例0~1设置,而且X、Y要调换位置,width、height调换位置) 
  output.rectOfInterest = CGRectMake(Y /ScreenHeight, X /ScreenWidth, height /ScreenHeight, width /ScreenWidth)</span> 

2. 获取相册中的二维码图片,用CIDetector类,但是这个类只能识别二维码图片,条形码目前暂不支持

<span style="font-size:14px;">//要实现两个代理方法 
<UIImagePickerControllerDelegate,UINavigationControllerDelegate> 
</span> 
[objc] view plain copy 在CODE上查看代码片派生到我的代码片
<span style="font-size:14px;">-(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:@"未识别图片中的二维码"]; 
  } 
}</span>

 用CIDetector类读取相册中的二维码遇到的问题是手机截屏的图片可以读取成功,手机拍照的图片取出成功率比较低。并且不支持读取条形码。

解决办法:

读取相册中的二维码/条形码,使用ZBarSDK,下面介绍一下怎么在工程中引入ZBarSDK,因为我的Demo工程没有使用CocoaPods去管理第三方库,所以介绍手动将ZBarSDK导入工程并配置。

步骤一.在工程中建一个Frameworks文件夹将ZBarSDK文件夹导入,如图

步骤二.在工程中添加依赖库,如图:

步骤三.导入头文件并调用对应方法。

#import "ZBarSDK.h"
/<span style="font-size:18px;">** 
 * 获取相册中的二维码图片 
 */ 
- (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; 
}</span> 

这样就可以成功的读取手机相册中的条形码和二维码图片了。

分享ZBarSDK的下载地址

以上所述是小编给大家介绍的iOS 条码及二维码扫描(从相册中读取条形码/二维码)及扫码过程中遇到的坑,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

更多精彩内容其他人还在看

IOS开发相册图片多选和删除的功能

之前小编有和大家分享过一篇关于从相册选取单张照片的文章,那么下面这篇文章跟大家分享下如何相册多图选择和删除,以及包括拍照功能,有需要的可以参考学习,下面来一起看看吧。
收藏 0 赞 0 分享

iOS使用runtime修改文本框(TextField)的占位文字颜色

相信大家都知道TextField默认的占位颜色也是深灰色,这个颜色比较难看清,这篇文章给大家介绍如何使用runtime修改TextField文本框的占位文字颜色,有需要的可以参考借鉴.
收藏 0 赞 0 分享

iOS实现点击状态栏自动回到顶部效果详解

在IOS开发过程中,经常会有这种需求,需要通过点击状态栏返回到顶部,给用户更好的体验效果,下面这篇文章给大家详细介绍了实现过程,有需要的可以参考借鉴。
收藏 0 赞 0 分享

IOS上iframe的滚动条失效的解决办法

这篇文章主要为大家详细介绍了IOS上iframe的滚动条失效的解决办法,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

IOS面试大全之常见算法

之前看了很多面试题,感觉要不是不够就是过于冗余,于是我将网上的一些面试题进行了删减和分类,这篇文章先给大家分享一下IOS中的常见算法,有需要的可以参考借鉴。
收藏 0 赞 0 分享

IOS判断字符串是否有空格实例

在我们大家日常开发的时候,经常会需要对注册,登录,忘记密码等功能的密码进行判断是否包含空格,下面这篇文章给大家分享了自己封装的一个方法,有需要的可以参考借鉴。
收藏 0 赞 0 分享

IOS设置按钮为圆角的示例代码

这篇文章给大家分享了IOS按钮设置为圆角的方法,按钮的四个角都可随意设置为圆角,对大家开发IOS具有一定的参考借鉴价值。有需要的朋友们可以参考借鉴。
收藏 0 赞 0 分享

IOS绘制虚线的方法总结

这篇文章给大家分享了iOS中绘制虚线常见的几种方式,大家可以根据自己的需求进行选择哪种方法,下面跟着小编来一起看看吧。
收藏 0 赞 0 分享

React Native搭建iOS开发环境

React Native的门槛不管是对于前端开发者还是移动端开发者来说都是很高的,既要懂原生又要懂js,技术栈是相当长的。但是没有关系,下面我们一步步来学习,慢慢成长吧!
收藏 0 赞 0 分享

IOS轻松几步实现自定义转场动画

这篇文章将讲述几个步骤实现转场动画的自定义方式,并且给出了示例代码,毕竟代码才是我们的语言,这样比较容易上手。下面来一起看看吧。
收藏 0 赞 0 分享
查看更多