我正在寻找帮助我从图像转换QRCode的代码。 AVFoundation
可以通过相机帮助扫描QR码。但是,如果我想从UIImage获得编码qr字符串,有没有办法这样做?
答案 0 :(得分:9)
原生解决方案:
据我所知,你可以从iOS 7开始从视频中扫描QR。(见其他答案)
但是,从图像扫描仅出现在iOS 8中。
和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;