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

所属分类: 软件编程 / IOS 阅读数: 1454
收藏 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开发笔记--详解UILabel的相关属性设置

这篇文章主要介绍了iOS开发笔记--详解UILabel的相关属性设置,对初学者具有一定的参考价值,有需要的可以了解一下。
收藏 0 赞 0 分享

iOS中获取系统相册中的图片实例

这篇文章主要介绍了iOS中获取系统相册中的图片实例,具有一定的参考价值没有需要的朋友可以了解一下。
收藏 0 赞 0 分享

iOS 检测网络状态的两种方法

一般有Reachability和AFNetworking监测两种方式,都是第三方的框架,下文逐一详细给大家讲解,感兴趣的朋友一起看看吧
收藏 0 赞 0 分享

IOS 性能优化中离屏渲染

本文主要介绍了IOS 性能优化中离屏渲染的资料,提供了几种方法讲解了优化,有需要的小伙伴可以参考下
收藏 0 赞 0 分享

iOS获取当前设备型号等信息(全)包含iPhone7和iPhone7P

这篇文章主要介绍了iOS获取当前设备型号设备信息的总结包含iPhone7和iPhone7P,包括ios7之前之后的获取方式,本文接的非常详细,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

iOS实现爆炸的粒子效果示例代码

之前在网上看到了一个Android实现的爆炸效果,感觉非常不错,所以自己尝试用iOS来实现下效果,现在将实现的过程、原理以及遇到的问题分享给大家,有需要的朋友们可以参考借鉴,下面来一起看看吧。
收藏 0 赞 0 分享

iOS毕业设计之天气预报App

这篇文章主要为大家详细介绍了iOS毕业设计之天气预报App,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

iOS轻点、触摸和手势代码开发

这篇文章主要为大家详细介绍了iOS轻点、触摸和手势代码开发,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

iOS 实现多代理的方法及实例代码

这篇文章主要介绍了iOS 实现多代理的方法及实例代码的相关资料,需要的朋友可以参考下
收藏 0 赞 0 分享

iOS文字渐变色效果的实现方法

在大家日常开发iOS的过程中,可能会遇到要实现文字渐变色的效果,这篇文章文章通过示例代码和详细的步骤介绍了如何利用iOS实现文字渐变色的效果,实现后的很不错,感兴趣的朋友们下面来一起看看吧。
收藏 0 赞 0 分享
查看更多