1. 程式人生 > >iOS掃碼的那些事

iOS掃碼的那些事

想方便快捷就用第三方的,常見的zbr,zxing,各有特色吧,都知道微信的掃描比較快,不管自己寫的用的原生的還是第三方的都比較慢,微信其也是用zbar,但估計有改過裡面的演算法。。。ZXing和ZBar 匯入的時候需要注意各種相容,iOS7自帶的不需要考慮這些。配置方面還是iOS7自帶的方便簡單一些。但是iOS7自帶的有些弊端,就是掃描條形碼不是很給力,遇到彎曲的條形(比如在瓶子上印製的)碼就很難掃出來,但是掃描二維碼就很給力,瞬間掃描。所以對比之下,我條形碼用的是ZXing,二維碼用的是iOS7自帶。配置的時候要注意焦距,圖片質量的配置,這樣搭配下來會好很多。但是我現在還有一個問題沒有解決,就是對焦速度不快,等對焦速度解決了的話就完美了。現在基本上和微信掃碼的速度一樣,不考慮對焦速度的話會比微信要快。對於對焦問題這個我還有待去探究,不過建議大家還是用原生的會比較快,值得一提的是原生的不帶快門聲音,解決辦法是自己往裡面新增一個系統聲音即可,這個聲音可以自定義,使用AVCaptureStillImageOutput獲取影象有一個問題,就是會有快門聲,如果你覺得快門聲煩人,那建議採取另外一種方式,AVCaptureVideoDataOutput,視訊流的方式進行擷取,

     //初始化stillImageOutput = [[AVCaptureStillImageOutput alloc]init];  

NSDictionary* outputSettings = @{AVVideoCodecKey:AVVideoCodecJPEG};  

[stillImageOutput setOutputSettings:outputSettings];  

if ([self.session canAddOutput:stillImageOutput]) 

{  

[self.session addOutput:stillImageOutput];  

}//以下程式碼在掃描結果方法captureOutput中呼叫

AVCaptureConnection *myVideoConnection = nil;  

//從 AVCaptureStillImageOutput 中取得正確型別的 AVCaptureConnection

for (AVCaptureConnection *connection in stillImageOutput.connections

{  

for (AVCaptureInputPort *port in [connection inputPorts])

{  

if ([[port mediaType] isEqual:AVMediaTypeVideo]) 

{  

myVideoConnection = connection;  

break;  

}  

}  

}  

NSString* fileName = @"儲存影象的名字";  

//擷取影像(包含拍照音效)

[stillImageOutput captureStillImageAsynchronouslyFromConnection:myVideoConnection completionHandler:^(CMSampleBufferRef imageDataSampleBuffer, NSError *error) {  

//完成擷取時的處理程式(Block)

if (imageDataSampleBuffer)

{  

NSData *imageData = [AVCaptureStillImageOutput jpegStillImageNSDataRepresentation:imageDataSampleBuffer];  

NSString* filePath = [NSString stringWithFormat:@"%@/%@.jpg",[iTools getDocumentDirectory],fileName]; //寫檔案到本地

}  

}

];

更多詳細資料請訪問https://github.com/YCM888/miaomaio