iOS开发之二维码扫描

iOS开发之二维码扫描

在 iOS7 以前,在IOS中实现二维码和条形码扫描,我们所知的有,两大开源组件 ZBar 与 ZXing,iOS7之后我们就可以使用SDK中的AVFoundation框架来处理二维码的扫描。

关于AVFoundation

AVFoundation 是一个很大基础库,用来创建基于时间的视听媒体,可以使用它来检查,创建、编辑或媒体文件。也可以输入流从设备和操作视频实时捕捉和回放。与处理二维码相关的有:


  • AVCaptureSession 管理输入(AVCaptureInput)和输出(AVCaptureOutput)流,包含开启和停止会话方法。
  • AVCaptureDeviceInput 是AVCaptureInput的子类,可以作为输入捕获会话,用AVCaptureDevice实例初始化。
  • AVCaptureDevice 代表了物理捕获设备如:摄像机。用于配置等底层硬件设置相机的自动对焦模式。
  • AVCaptureMetadataOutput 是AVCaptureOutput的子类,处理输出捕获会话。捕获的对象传递给一个委托实现AVCaptureMetadataOutputObjectsDelegate协议。协议方法在指定的派发队列(dispatch queue)上执行。
  • AVCaptureVideoPreviewLayerCALayer的一个子类,显示捕获到的相机输出流。
    使用过程中注意事项:
  1. AVCaptureSession 可以设置 sessionPreset 属性,这个决定了视频输入每一帧图像质量的大小。
    • AVCaptureSessionPreset320x240
    • AVCaptureSessionPreset352x288
    • AVCaptureSessionPreset640x480
    • AVCaptureSessionPreset960x540
    • AVCaptureSessionPreset1280x720
    • AVCaptureSessionPreset1920x1080
      以上列举了部分的属性值,分别代表输入图片质量大小,一般来说AVCaptureSessionPreset640x480就够使用,但是如果要保证较小的二维码图片能快速扫描,最好设置高些,如AVCaptureSessionPreset1920x1080(就是我们常说的1080p).
  2. 为了提高性能,可以在AVFoundation中设置 AVCaptureMetadataOutput 的 rectOfInterest 属性来配置解析范围。
    这个CGRect参数和普通的Rect范围不太一样,它的四个值的范围都是0-1,表示比例。
    rectOfInterest都是按照横屏来计算的 所以当竖屏的情况下 x轴和y轴要交换一下。
    宽度和高度设置的情况也是类似。
小结

代码在这里

推荐阅读更多精彩内容