【发布时间】:2017-05-04 13:17:59
【问题描述】:
我想从实时摄像头和图像中扫描二维码和条形码。我之前使用 ZBar 库来扫描代码。它不扫描特定类型的二维码和条形码。此外,在从实时摄像头扫描代码时,Apple 的 AVFoundation 框架似乎更加快速和准确。
所以我不想使用 ZBar。为了从从图库中挑选的图像中扫描代码,我使用了 CIDetector。但似乎 CIDetector 无法从图像中扫描条形码。我已经在整个堆栈中搜索了流CIDetector For other Barcode Types, Scanning barcode from UIImage natively (i.e., not using ZBar)
但我还没有找到一种方法来使用 CIDetector 扫描从画廊中挑选的图像中的条形码。是否可以使用 CIDetector 从 UIImage 中扫描条形码?
不推荐其他第三方库。我想使用苹果的默认框架来完成这项工作。
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{
[picker dismissViewControllerAnimated:YES completion:nil];
UIImage *image = [info objectForKey:UIImagePickerControllerOriginalImage];
CIImage *img = [[CIImage alloc]initWithImage:image];
CIDetector* detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{CIDetectorAccuracy:CIDetectorAccuracyHigh}];
if (detector)
{
NSArray* featuresR = [detector featuresInImage:img];
NSString* decodeR;
for (CIQRCodeFeature* featureR in featuresR)
{
NSLog(@"decode %@ ",featureR.messageString);
decodeR = featureR.messageString;
[self showAlertWithTitle:@"Success" withMessage:decodeR];
return;
}
[self showAlertWithTitle:@"Error" withMessage:@"Invalid Image"];
}
}
【问题讨论】:
-
您已经在 UIImages 上进行了扫描?您将它们转换为 CIImage ([[CIImage alloc]initWithImage:image]),然后将它们传递给 CIDetector。
-
仅适用于扫描二维码,不适用于条码。对于包含条形码的图像,我在调用
featuresInImage时得到空数组。
标签: ios objective-c qr-code cidetector