【问题标题】:QR code reader for iPhone [closed]iPhone的二维码阅读器[关闭]
【发布时间】:2011-08-19 15:36:43
【问题描述】:

我想创建基于二维码阅读器的应用程序。

使用哪个库,我可以创建我的应用程序?

注意:我在谷歌上搜索过。我总是得到zxing。我下载了zxing项目。但问题是;我运行应用程序。但它只读取条形码。没有读取二维码的选项。

请告诉我该怎么做...

提前致谢。

【问题讨论】:

  • stackoverflow.com/questions/838724/… 这个答案链接到读取二维码的条形码应用程序的源代码。你应该在那里得到一些很好的信息
  • zxing 在 iOS 上的二维码确实做得很好。事实上,它比其他代码更好。示例 ScanTest 应用程序演示了它是如何使用的,并且可以很好地解码 QR 码。

标签: iphone qr-code zxing


【解决方案1】:

ZBarSDK 是另一种选择。一个非常强大的库。

更新 2014 年 1 月

从 iOS7 开始,AVCaptureDevice 现在包括读取(各种)条形码并返回人类可读值的能力。如果您的目标是 iOS7+,这就是要走的路。当然,ZBarSDK 仍然非常适合 iOS7 之前的支持。

【讨论】:

  • 我还没有发布任何使用它的东西,但据我测试,一个可靠的库,还提供了一个非常好的捕获模块(例如突出显示代码等)并且非常简单理解。
  • ZBarSDK 是免费版吗?我可以将 ZBarSDK 用于我的付费应用吗?
  • 请注意,ZBarSDK 许可证要求您根据要求提供源代码
【解决方案2】:

AVCaptureMetaDataOutput - 从 iOS 7 开始

使用 iOS 7 新增的 AVCaptureMetaDataOutput 扫描所有种类的 UPC、QR 码和条形码。您只需将其设置为 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

【讨论】:

  • 这为我节省了大量的麻烦,本来可以开始集成旧的 SDK ......这也是一个很好的阅读:renaudpradenc.com/?p=453
  • 我希望我可以 +1 两次。一次用于代码,另一次用于@import
  • 有关更完整的示例,它还可以处理方向更改、从后台恢复等,请参阅github.com/magmatic/BMCodeScanner - 使用本机 AVFoundation API。
  • [session addOutput:] 方法必须在[output setMetadataObjectTypes:@AVMetadataObjectTypeQRCode]]; 之前调用。否则你会得到一个 NSInvalidArgumentException。
  • 感谢@SebastianZ,因此我经常遇到错误
【解决方案3】:

试试ZXingObjC 工作出色且易于集成。

您还可以在视图中定义扫描仪窗口的大小。

【讨论】:

    【解决方案4】:

    您可以使用 webqr.com 供您参考,它的库也可以用于解码 QR 码和编码。但对于不同的浏览器,如 safari、Chrome、IE、Firefox,您可以为 This 添加插件。希望对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      • 2011-08-19
      相关资源
      最近更新 更多