iOS開發之二維碼掃描
在 iOS7 以前,在IOS中實現二維碼和條形碼掃描,我們所知的有,兩大開源組件 ZBar 與 ZXing,iOS7之后我們就可以使用SDK中的AVFoundation
框架來處理二維碼的掃描。
關于AVFoundation
AVFoundation 是一個很大基礎庫,用來創建基于時間的視聽媒體,可以使用它來檢查,創建、編輯或媒體文件。也可以輸入流從設備和操作視頻實時捕捉和回放。與處理二維碼相關的有:
- AVCaptureSession 管理輸入(AVCaptureInput)和輸出(AVCaptureOutput)流,包含開啟和停止會話方法。
- AVCaptureDeviceInput 是AVCaptureInput的子類,可以作為輸入捕獲會話,用AVCaptureDevice實例初始化。
- AVCaptureDevice 代表了物理捕獲設備如:攝像機。用于配置等底層硬件設置相機的自動對焦模式。
- AVCaptureMetadataOutput 是AVCaptureOutput的子類,處理輸出捕獲會話。捕獲的對象傳遞給一個委托實現AVCaptureMetadataOutputObjectsDelegate協議。協議方法在指定的派發隊列(dispatch queue)上執行。
- AVCaptureVideoPreviewLayerCALayer的一個子類,顯示捕獲到的相機輸出流。
使用過程中注意事項:
- AVCaptureSession 可以設置 sessionPreset 屬性,這個決定了視頻輸入每一幀圖像質量的大小。
- AVCaptureSessionPreset320x240
- AVCaptureSessionPreset352x288
- AVCaptureSessionPreset640x480
- AVCaptureSessionPreset960x540
- AVCaptureSessionPreset1280x720
- AVCaptureSessionPreset1920x1080
以上列舉了部分的屬性值,分別代表輸入圖片質量大小,一般來說AVCaptureSessionPreset640x480就夠使用,但是如果要保證較小的二維碼圖片能快速掃描,最好設置高些,如AVCaptureSessionPreset1920x1080(就是我們常說的1080p).
- 為了提高性能,可以在AVFoundation中設置 AVCaptureMetadataOutput 的 rectOfInterest 屬性來配置解析范圍。
這個CGRect參數和普通的Rect范圍不太一樣,它的四個值的范圍都是0-1,表示比例。
rectOfInterest都是按照橫屏來計算的 所以當豎屏的情況下 x軸和y軸要交換一下。
寬度和高度設置的情況也是類似。