是否可以将QRCode图像解码为值

时间:2014-12-16 13:09:41

标签: ios objective-c camera qr-code

我正在寻找帮助我从图像转换QRCode的代码。 AVFoundation可以通过相机帮助扫描QR码。但是,如果我想从UIImage获得编码qr字符串,有没有办法这样做?

5 个答案:

答案 0 :(得分:9)

原生解决方案:
据我所知,你可以从iOS 7开始从视频中扫描QR。(见其他答案)
但是,从图像扫描仅出现在iOS 8中。

请参阅CIQRCodeFeature

this shinobicontrols tutorial

第三方图书馆:
例如ZBar

答案 1 :(得分:5)

CIDetector* detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{CIDetectorAccuracy:CIDetectorAccuracyHigh}];
if (detector)  {
  NSArray* featuresR = [detector featuresInImage:scannedImg.CIImage];
  NSString* decodeR;
  for (CIQRCodeFeature* featureR in featuresR)  {
    NSLog(@"decode %@ ",featureR.messageString);
    decodeR = featureR.messageString;
  }
}

答案 2 :(得分:3)

编辑:

此答案描述了如何扫描摄像机输入中的QR码。这不是OP所要求的。 OP询问扫描静止图像。请参阅@ DanSkeel的答案。

我将离开这个答案,因为它仍然有用。


确实有可能。 Apple在iOS 7中添加了用于检测条形码的API。

您的搜索字词是AVCaptureMetadataOutput,AVMetadataMachineReadableCodeObject。

有点牵扯。您必须创建一个AVCaptureSession,找到相机并将其作为捕获设备附加,然后创建一个AVCaptureMetadataOutput对象并告诉它监视特定类型的条形码(在您的情况下为AVMetadataObjectTypeQRCode)。

shinobicontrols有一个示例项目,展示了如何做到这一点。转到此链接:

shinobicontrols - Introducing iOS7 Day-by-Day

您想要的项目是第16天:解码QR码。

请注意,Apple的条形码阅读API可以读取几十种类型的条形码。您可以告诉它您感兴趣的类型。我修改了演示项目以检测所有支持的条形码。它能够检测到UPC代码,美国邮政条形码,QR码以及我能够找到并测试的许多其他代码。

顺便说一下,这是一个很棒的网站。苹果在iOS 7中引入了许多非常有用的新API演示。

编辑:

好吧,我想我夸大了。 Apple的代码可以解码以下条形码格式(我算10,这几乎不是“几十”......)

AVMetadataObjectTypeUPCECode,
AVMetadataObjectTypeCode39Code,
AVMetadataObjectTypeCode39Mod43Code,
AVMetadataObjectTypeEAN13Code,
AVMetadataObjectTypeEAN8Code,
AVMetadataObjectTypeCode93Code,
AVMetadataObjectTypeCode128Code,
AVMetadataObjectTypePDF417Code,
AVMetadataObjectTypeQRCode,
AVMetadataObjectTypeAztecCode

答案 3 :(得分:2)

我们使用支持包括QR在内的各种条形码的https://github.com/TheLevelUp/ZXingObjC。它是ZXing的纯Objective-C版本,现在只是java。

答案 4 :(得分:0)

只为那些尝试过以上答案的人发帖,但这对他们没用。这对我有用。

CIContext *context = [CIContext contextWithOptions:nil];
CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:context options:@{CIDetectorAccuracy:CIDetectorAccuracyHigh}];
CIImage *imageQRCode = [CIImage imageWithCGImage:<YourImageToBeRead>.CGImage];
NSArray *features = [detector featuresInImage:imageQRCode];
        CIQRCodeFeature *feature = [features firstObject];

NSString *result = feature.messageString;