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