服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - IOS - iOS 条码及二维码扫描(从相册中读取条形码/二维码)及扫码过程中遇到的坑

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

2021-02-28 14:33四分之一工程师 IOS

本文主要给大家介绍ios中从手机相册中读取条形码和二维码的问题及解决办法,需要的朋友参考下

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

1.扫码.

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

?
1
2
3
4
<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类,但是这个类只能识别二维码图片,条形码目前暂不支持

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<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文件夹导入,如图

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

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

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#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 条码及二维码扫描(从相册中读取条形码/二维码)及扫码过程中遇到的坑,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对服务器之家网站的支持!

原文链接:http://blog.csdn.net/gaomingyangc/article/details/54017879

延伸 · 阅读

精彩推荐
  • IOSiOS 雷达效果实例详解

    iOS 雷达效果实例详解

    这篇文章主要介绍了iOS 雷达效果实例详解的相关资料,需要的朋友可以参考下...

    SimpleWorld11022021-01-28
  • IOSiOS通过逆向理解Block的内存模型

    iOS通过逆向理解Block的内存模型

    自从对 iOS 的逆向初窥门径后,我也经常通过它来分析一些比较大的应用,参考一下这些应用中某些功能的实现。这个探索的过程乐趣多多,不仅能满足自...

    Swiftyper12832021-03-03
  • IOSIOS 屏幕适配方案实现缩放window的示例代码

    IOS 屏幕适配方案实现缩放window的示例代码

    这篇文章主要介绍了IOS 屏幕适配方案实现缩放window的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要...

    xiari5772021-06-01
  • IOSIOS开发之字典转字符串的实例详解

    IOS开发之字典转字符串的实例详解

    这篇文章主要介绍了IOS开发之字典转字符串的实例详解的相关资料,希望通过本文能帮助到大家,让大家掌握这样的方法,需要的朋友可以参考下...

    苦练内功5832021-04-01
  • IOSiOS布局渲染之UIView方法的调用时机详解

    iOS布局渲染之UIView方法的调用时机详解

    在你刚开始开发 iOS 应用时,最难避免或者是调试的就是和布局相关的问题,下面这篇文章主要给大家介绍了关于iOS布局渲染之UIView方法调用时机的相关资料...

    windtersharp7642021-05-04
  • IOSiOS中tableview 两级cell的展开与收回的示例代码

    iOS中tableview 两级cell的展开与收回的示例代码

    本篇文章主要介绍了iOS中tableview 两级cell的展开与收回的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    J_Kang3862021-04-22
  • IOS关于iOS自适应cell行高的那些事儿

    关于iOS自适应cell行高的那些事儿

    这篇文章主要给大家介绍了关于iOS自适应cell行高的那些事儿,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的...

    daisy6092021-05-17
  • IOS解析iOS开发中的FirstResponder第一响应对象

    解析iOS开发中的FirstResponder第一响应对象

    这篇文章主要介绍了解析iOS开发中的FirstResponder第一响应对象,包括View的FirstResponder的释放问题,需要的朋友可以参考下...

    一片枫叶4662020-12-25