2011-05-05 159 views
41

我想創建基於QR碼閱讀器的應用程序。適用於iPhone的QR碼閱讀器

使用哪個庫,我可以創建我的應用程序?

注:我在谷歌搜索。總是我得到zxing。我下載了zxing項目。但問題是,我運行該應用程序。但它只讀取條碼。沒有選擇閱讀QR碼。

請告訴我怎麼做這個...

在此先感謝。

+1

http://stackoverflow.com/questions/838724/barcode-framework-for-the-iphone/862656#862656這個答案鏈接到源條碼的應用程序讀取qrcodes。你應該得到一些很好的信息 – 2011-05-05 18:55:34

+1

zxing肯定在iOS上很好地執行QR碼。事實上,比其他代碼更好。示例ScanTest應用程序演示如何使用它,並將很好地解碼QR碼。 – smparkes 2011-05-29 22:48:43

回答

49

ZBarSDK是另一種選擇。一個非常有能力的庫。

UPDATE 2014年1月

在iOS7開始,AVCaptureDevice現在能夠讀取(各類)條形碼,並返回一個人類可讀價值的能力。如果你的目標是iOS7 +,這是一條路。當然,ZBarSDK對於iOS7之前的支持仍然很棒。

+1

我還沒有發佈任何使用它,但據我測試,一個可靠的庫,也提供了一個很好的捕獲模塊(例如突出代碼等),並且很容易理解。 – 2011-05-05 19:38:33

+0

ZBarSDK是免費許可證版本?我可以爲我的付費應用使用ZBarSDK嗎? – jfalexvijay 2011-05-06 05:17:06

+1

請參閱http://zbar.sourceforge.net/iphone/sdkdoc/licensing.html – 2011-05-06 14:38:33

3

嘗試ZXingObjC工作的偉大,並易於集成。

同樣,你也可以定義視圖內掃描窗口的大小。

28

AVCaptureMetaDataOutput - 從iOS的7起

掃描的UPC,QR碼,並與AVCaptureMetaDataOutput,新品種到iOS 7,所有你需要做的是將它設置爲AVCaptureSession輸出的條形碼,並因此實現captureOutput:didOutputMetadataObjects:fromConnection:方法:

@import AVFoundation; 

AVCaptureSession *session = [[AVCaptureSession alloc] init]; 
AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 
NSError *error = nil; 

AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device 
                   error:&error]; 
if (input) { 
    [session addInput:input]; 
} else { 
    NSLog(@"Error: %@", error); 
} 

AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init]; 
[output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]]; 
[output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()]; 
[session addOutput:output]; 

[session startRunning]; 

#pragma mark - AVCaptureMetadataOutputObjectsDelegate 

- (void)captureOutput:(AVCaptureOutput *)captureOutput 
     didOutputMetadataObjects:(NSArray *)metadataObjects 
       fromConnection:(AVCaptureConnection *)connection 
    { 
    NSString *QRCode = nil; 
    for (AVMetadataObject *metadata in metadataObjects) { 
     if ([metadata.type isEqualToString:AVMetadataObjectTypeQRCode]) { 
      // This will never happen; nobody has ever scanned a QR code... ever 
      QRCode = [(AVMetadataMachineReadableCodeObject *)metadata stringValue]; 
      break; 
      } 
     } 

    NSLog(@"QR Code: %@", QRCode); 
    } 

AVFoundation支持所有你聽說過的代碼(也可能是一些你沒有):

AVMetadataObjectTypeUPCECode 
AVMetadataObjectTypeCode39Code 
AVMetadataObjectTypeCode39Mod43Code 
AVMetadataObjectTypeEAN13Code 
AVMetadataObjectTypeEAN8Code 
AVMetadataObjectTypeCode93Code 
AVMetadataObjectTypeCode128Code 
AVMetadataObjectTypePDF417Code 
AVMetadataObjectTypeQRCode 
AVMetadataObjectTypeAztecCode 
+0

這節省了我噸和大量的麻煩,已經開始集成舊的SDK ...此外是一個很好的閱讀:http://www.renaudpradenc.com/?p=453 – Wirsing 2013-11-23 01:12:24

+2

我希望我可以+1這兩次。一次用於代碼,另一次用於「@ import」。 – 2014-03-03 00:51:36

+4

欲瞭解更多完整的示例,還可以處理方向更改等事情,從後臺等恢復,請參閱https://github.com/magmatic/BMCodeScanner - 使用本機AVFoundation API。 – SaltyNuts 2014-07-31 19:42:37

0

供您參考,您可以使用webqr.com和它的圖書館,你可以使用解碼QR碼和編碼也。但對於safari,Chrome,IE,Firefox等不同的瀏覽器,您可以爲此添加插件。希望這樣會對你有幫助。