我想从实时相机和图像中扫描qr和条形码。我以前使用ZBar库来扫描代码。它不扫描特定类型的qr和条形码。此外,苹果的AVFoundation框架在从实时相机扫描代码时看起来更加快速准确。使用CIDetector扫描条形码(1和2维)
所以我不想使用ZBar。为了扫描从图库中挑选的图像中的代码,我使用了CIDetector。但似乎CIDetector无法扫描图像中的条形码。我已经找遍了堆过流CIDetector For other Barcode Types, Scanning barcode from UIImage natively (i.e., not using ZBar)
,但我还没有找到一种方法来扫描条形码形成图像使用CIDetector从画廊挑选。是否可以使用CIDetector从UIImages扫描条码?
不建议其他第三方库。我想用苹果的默认框架来完成这项工作。
-(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。 – Lepidopteron
这只适用于扫描QR码,但不适用于条形码。对于包含条形码的图像,我在调用'featuresInImage'时获得了空数组。 –