2011-05-05 190 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等不同的浏览器,您可以为此添加插件。希望这样会对你有帮助。