我想從實時相機和圖像中掃描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'時獲得了空數組。 –