当前位置: 移动技术网 > IT编程>移动开发>IOS > iOS 条码及二维码扫描(从相册中读取条形码/二维码)及扫码过程中遇到的坑

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

2019年07月24日  | 移动技术网IT编程  | 我要评论

英语短篇故事,定增e时代,ca1630

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

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 uicollectionview实现横向滚动

    现在使用卡片效果的app很多,之前公司让实现一种卡片效果,就写了一篇关于实现卡片的文章。文章最后附有demo实现上我选择了使用uicollectionview ... [阅读全文]
  • iOS UICollectionView实现横向滑动

    本文实例为大家分享了ios uicollectionview实现横向滑动的具体代码,供大家参考,具体内容如下uicollectionview的横向滚动,目前我使... [阅读全文]
  • iOS13适配深色模式(Dark Mode)的实现

    iOS13适配深色模式(Dark Mode)的实现

    好像大概也许是一年前, mac os系统发布了深色模式外观, 看着挺刺激, 时至今日用着也还挺爽的终于, 随着iphone11等新手机的发售, ios 13系统... [阅读全文]
  • ios 使用xcode11 新建项目工程的步骤详解

    ios 使用xcode11 新建项目工程的步骤详解

    xcode11新建项目工程,新增了scenedelegate这个类,转而将原appdelegate负责的对ui生命周期的处理担子接了过来。故此可以理解为:ios... [阅读全文]
  • iOS实现转盘效果

    本文实例为大家分享了ios实现转盘效果的具体代码,供大家参考,具体内容如下demo下载地址: ios转盘效果功能:实现了常用的ios转盘效果,轮盘抽奖效果的实现... [阅读全文]
  • iOS开发实现转盘功能

    本文实例为大家分享了ios实现转盘功能的具体代码,供大家参考,具体内容如下今天给同学们讲解一下一个转盘选号的功能,直接上代码直接看viewcontroller#... [阅读全文]
  • iOS实现轮盘动态效果

    本文实例为大家分享了ios实现轮盘动态效果的具体代码,供大家参考,具体内容如下一个常用的绘图,主要用来打分之类的动画,效果如下。主要是ios的绘图和动画,本来想... [阅读全文]
  • iOS实现九宫格连线手势解锁

    本文实例为大家分享了ios实现九宫格连线手势解锁的具体代码,供大家参考,具体内容如下demo下载地址:效果图:核心代码://// clockview.m// 手... [阅读全文]
  • iOS实现卡片堆叠效果

    本文实例为大家分享了ios实现卡片堆叠效果的具体代码,供大家参考,具体内容如下如图,这就是最终效果。去年安卓5.0发布的时候,当我看到安卓全新的material... [阅读全文]
  • iOS利用余弦函数实现卡片浏览工具

    iOS利用余弦函数实现卡片浏览工具

    本文实例为大家分享了ios利用余弦函数实现卡片浏览工具的具体代码,供大家参考,具体内容如下一、实现效果通过拖拽屏幕实现卡片移动,左右两侧的卡片随着拖动变小,中间... [阅读全文]
验证码:
移动技术网