iOS 二维码扫描相关功能实现

2020-01-21 07:13:15丽君

初始化scanManager


- (void)setupScanManager {
 self.scanManager = [QRCodeScanManager sharedManager];
  
 NSArray *arr = @[AVMetadataObjectTypeQRCode, AVMetadataObjectTypeEAN13Code, AVMetadataObjectTypeEAN8Code, AVMetadataObjectTypeCode128Code];
 [_scanManager setupSessionPreset:AVCaptureSessionPreset1920x1080 metadataObjectTypes:arr currentController:self];
  
 __weak __typeof(self)weakSelf = self;
 //光扫描结果回调
 [_scanManager scanResult:^(NSArray *metadataObjects) {
  if (metadataObjects != nil && metadataObjects.count > 0) {
   [weakSelf.scanManager playSoundName:@"sound.caf"];
   //obj 为扫描结果
   AVMetadataMachineReadableCodeObject *obj = metadataObjects[0];
   NSString *url = [obj stringValue];
   NSLog(@"---url = :%@", url);
  } else {
   NSLog(@"暂未识别出扫描的二维码");
  }
 }];
  
 //光纤变化回调
 [_scanManager brightnessChange:^(CGFloat brightness) {
  [weakSelf.scanView lightBtnChangeWithBrightnessValue:brightness];
 }];
  
}

从相册识别二维码:


//借助第三方相册
- (void)albumBtnClick {
 TZImagePickerController *pickerController = [[TZImagePickerController alloc] initWithMaxImagesCount:1 delegate:self];
  
 __weak __typeof(self)weakSelf = self;
  
 [pickerController setDidFinishPickingPhotosHandle:^(NSArray *photos, NSArray *assets, BOOL isSelectOriginalPhoto) {
  UIImage *image = photos[0];
  // CIDetector(CIDetector可用于人脸识别)进行图片解析,从而使我们可以便捷的从相册中获取到二维码
  // 声明一个 CIDetector,并设定识别类型 CIDetectorTypeQRCode
  // 识别精度
  CIDetector *detector = [CIDetector detectorOfType:CIDetectorTypeQRCode context:nil options:@{CIDetectorAccuracy:CIDetectorAccuracyHigh}];
   
  //取得识别结果
  NSArray *features = [detector featuresInImage:[CIImage imageWithCGImage:image.CGImage]];
   
  NSString *resultStr;
  if (features.count == 0) {
   NSLog(@"暂未识别出二维码");
  } else {
   for (int index = 0; index < [features count]; index++) {
    CIQRCodeFeature *feature = [features objectAtIndex:index];
    resultStr = feature.messageString;
   }
   NSLog(@"---url:%@", resultStr);
  }
 }];
 [self presentViewController:pickerController animated:YES completion:nil];
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持ASPKU。


注:相关教程知识阅读请移步到IOS开发频道。