概述

实现二维码和条形码扫描,两大开源组件ZBar与ZXing
ZBar: 扫描灵敏性,内存较优,但“圆角二维码”扫描比较困难。
ZXing: Google Code上的一个开源的条形码扫描库,是用java设计

而苹果原生的AVFoundation 扫描灵敏性和内存上最优,不过不兼容iOS6及之前的版本。

支持一维码扫描

一开始可以扫描二维码,但不支持一维码。

1). 添加metadataObjectTypes:AVMetadataObjectTypeEAN13Code,AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code,AVMetadataObjectTypeCode39Code

但是还是不支持扫描一维码。

然后看了关于iOS原生条形码扫描,你需要注意的两三事  此文中提到“是在Detect Center那个点,画一个无限延伸的米字型,然后去判断每一条在线能否解析出条形码所需要的0101010序列。而iOS默认的Center是 Layer 的 Center。提示给用户的那个框,已经远离了Center。所以我们竖着扫描的时候,那条水平的扫描线是没有贯穿条形码的,所以扫不上他。于是乎要根据设备,iPhone4 iPhone5 通过AVCaptureDeviceFormat和AVCaptureSessionPreset 重新设置一下AVCaptureMetadataOutput rectOfInterest,结果问题就解决了。”

但是,其实并没有很懂, 怎么通过AVCaptureDeviceFormat和AVCaptureSessionPreset重新设置AVCaptureMetadataOutput 的rectOfInterest也不明确。上网找了关于AVCaptureDeviceFormat和AVCaptureSessionPreset的相关信息,但是还是不知道怎么通过这两个去设置rectOfInterest。而该文作者信息判断来自于苹果的FAQ:Technical Note TN2325 

我去看了,FAQ中提到“the set of scan lines is expanded to cover a larger portion of the region of interest ("Additional")”, 在少数一些情况下扫描线会扩大到原始扫描区域之外,关于"Additional"的概念也不懂

所以我就上网找啊找 怎么使用AVCaptureDeviceFormat和AVCaptureSessionPreset去设置rectOfInterest

。。。。然后就是没有找到。

最后自己按照rectOfInterest的设置规则设置,然后可以扫描了。  

19th,March,2016

1. 设置识别区域RectOfInterest

识别区域默认是照相机捕获的整张照片,可通过RectOfInterest配置识别区域提升扫描性能和速度,

Tip: CGRectMak(y, x, height, width) 值为0-1.0f,eg: 扫描区域.y/屏幕高度。 网上资料:AVCapture捕捉的图片是横着的,而手机是竖着的,所以需要旋转90度。

"iOS上内置相机应用录制的mov/mp4视频可能产生一个Rotation元数据,表示录制视频时摄像头旋转到了多少角度。其值一般为这四个:0、90、180或270。

竖屏时rotation值为90.

横批,Home键在右侧时,Rotation=0."-- from [iOS]关于视频方向的若干问题

2. 识别小图SessionPreset属性

该属性可预设图像分辨率, 决定照片中每一帧图像质量的大小:

AVCaptureSessionPresetPhoto/High/Medium/Low

AVCaptureSessionPreset320x240/352x288/640x480/960x540/1280x720/1920x1080/3840x2160

想要识别小图则需要讲该属性设高一点,但相应的效率会比Low的低。

AVCaptureSessionPresetHight ==> iPhone5

一维码与二维码

一维码:条码的宽度储存数据,有一组规则排序的条和空以及对应的字符组成,

“条”(即使黑色的部分)光线反射率较低

“空” (即白色的部分)光线发射率较高

而这些“条”和“空”组成的数据可以转换成二进制和十进制的信息。

二维码:90年代发明了二维码,主要分为两种,一是堆叠式/行排式二维条码。另一种就是现在普遍使用的矩阵式二维码(Quick Response Code)拥有一维码的优点同时,容错性高,储存数据量大。

未完待续。。。敬请期待。。。如有想法。。。欢迎交流

参考资料:

18th,March,2016

(题外话: 其实现在是拒绝写博客的,因为不想写,但是还是写吧)

iOS二维码扫描,你需要注意的两件事

iOS:原生二维码扫描 // 强资料

二维码的生成细节和原理

一维码和二位码主要原理

二维码的生成细节和原理

[iOS]关于视频方向的若干问题
主题 : AVCaptureVideoPreviewLayer如何设置正确设置大小 

iOS--AVFoundation原生二维码与一维码扫描相关推荐

  1. iOS 7原生二维码扫描中文gbk编码乱码的解决

    有的二维码生成的含有中文的数据编码是GBK编码,如百度二维码生成器,使用系统原生二维码扫描就会出现乱码,于是开始网上查阅,该试的方法都尝试过了,终于功夫不负有心人,问题得到了解决,先上代码 NSStr ...

  2. iOS系统原生二维码条形码扫描

    本文讲述如何用系统自带的东东实现二维码扫描的功能:点击当前页面的某个按钮,创建扫描VIEW.细心的小伙伴可以发现 title被改变了,返回按钮被隐藏了.这个代码自己写就行了,与本文关系不大...绿色的 ...

  3. iOS原生二维码扫码实现(含蒙版和扫码动画)

    #一.iOS实现原生扫码的意义 二维码扫码功能对于现在的iOS App开发来说是非常重要的. 通常为了节省开发时间,很多开发者会采用ZXing和ZBar等第三方SDK进行开发. 这样的好处是快速便捷, ...

  4. iOS原生二维码扫描(一)

    首先搭建一个最初步的能识别出二维码信息的最基本框架: @interface ScanCodeViewController ()<AVCaptureMetadataOutputObjectsDel ...

  5. iOS上二维码和一维码识别系列一

    这段时间在做iOS上二维码和一维码的识别 其间遇到问题无数, 特此总结下来, 希望能给后来的同学供参考 在iOS上, 做二维码识别, 首先在网上查找资料, 查找到ZBar和ZXing这两个开源的识别程 ...

  6. iOS 原生二维码扫描和生成

    代码地址如下: http://www.demodashi.com/demo/12551.html 一.效果预览: 功能描述:WSLNativeScanTool是在利用原生API的条件下封装的二维码扫描 ...

  7. ios使用AVFoundation读取二维码的方法

    二维码(Quick Response Code,简称QR Code)是由水平和垂直两个方向上的线条设计而成的一种二维条形码(barcode).可以编码网址.电话号码.文本等内容,能够存储大量的数据信息 ...

  8. 苹果原生二维码生成与扫描及生成的二维码不清楚的解决方案

    苹果原生二维码生成与扫描及生成的二维码不清楚的解决方案 参考文章: (1)苹果原生二维码生成与扫描及生成的二维码不清楚的解决方案 (2)https://www.cnblogs.com/CoderEYL ...

  9. 使用zxing包生成和扫描二维码和一维码

    在开发之前要先下载zxing包对其简化,新建一个android工程,把zxing包中的android和android-code中的文件复制到相应的文件夹里面 其中的libs文件夹里需要zxing包中的 ...

最新文章

  1. Type Ⅰ error(false positive) Type Ⅱ error(false negative)
  2. 如何选择就业方向(80后的个人经验,转载)
  3. std::cout char + int
  4. 平面上有两个圆相交,求两个圆相交部分的面积
  5. 删除远程桌面登陆痕迹
  6. Spring Data JPA 从入门到精通~EntityManager介绍
  7. 南京大学获赠1.2亿!
  8. input readonly 光标显示问题
  9. 冯偌依曼计算机的基本原理是,03级计算机专《计算机组成原理》试卷A.doc
  10. React入门基础+练习(二)
  11. 114. PHP command line getopt
  12. JZOJ5946. 【NOIP2018模拟11.02】时空幻境(braid)
  13. 实验:进程调度算法(C语言)
  14. mac已安装flash控件_如何在Mac上安装和更新Flash
  15. JavaScript打飞机小游戏
  16. java实现上传zip/rar压缩文件,自动解压
  17. 如何做一个简单的XX(学生/图书馆)管理系统(二)
  18. 云桌面系统功能参数(备忘)
  19. 震惊!某程序员吐槽零基础自学编程很难,真的是这样吗?
  20. 最新青龙面板拉库JS

热门文章

  1. Data Whale第20期组队学习 Pandas学习—时序数据
  2. Python 工匠精神
  3. NC 查询聚合 AggVO
  4. 写一个函数int digit( int n , int k ),它返回数n的从右向左的第k个十进数字值。例如,函数调用digit(1234,2)将返回值3。
  5. [2.5]-AutoSAR零基础学习-AutoSAR解决方案
  6. Python Hangman猜字游戏
  7. Centos服务器被挂马的一次抓马经历
  8. CSS Sprites新手教程
  9. java要学mysql 吗_做JAVA开发需要把数据库学习到何种程度
  10. 自然语言处理与机械设计制造及自动化