iOS使用ZBar实现二维码扫描以及实现识别相册中二维码图片功能

来源:互联网 发布:新浪微博如何解绑淘宝 编辑:程序博客网 时间:2024/04/29 00:06

使用zbar调用相机扫码代码:

//打开相机

- (void) init_camera

{

   self.navigationController.navigationBarHidden=YES;

    [commonaddNavigationAddToView:self.viewInfo:@"二维码"Target:selfaction:@selector(returnbtn:)PatientName:@"扫码"];

    

    

   UIButton *rightBtn=[UIButtonbuttonWithType:UIButtonTypeCustom];

    [rightBtnsetFrame:CGRectMake(kScreenWidth-18-40,19, 40,40)];

    [rightBtnsetTitle:@"相册"forState:UIControlStateNormal];

    [rightBtn.titleLabelsetFont:[UIFontsystemFontOfSize:16]];

    [self.viewaddSubview:rightBtn];

    [rightBtnaddTarget:selfaction:@selector(rightBtnClick)forControlEvents:UIControlEventTouchUpInside];

    

    //开启zbar封装好的拍照界面

   ZBarReaderView * reader = [ZBarReaderViewnew];

   ZBarImageScanner * scanner = [ZBarImageScannernew];

    [scannersetSymbology:ZBAR_PARTIALconfig:0to:0];

    reader.readerDelegate =self;

   const float h = [UIScreenmainScreen].bounds.size.height;

   const float w = [UIScreenmainScreen].bounds.size.width;

   CGRect reader_rect1 = CGRectMake(0,60, w, h-60);//全屏模式

    reader.frame = reader_rect1;

    reader.backgroundColor = [UIColorredColor];

    [readerstart];

    [self.viewaddSubview: reader];

    

   //添加覆盖视图

   _overLayView = [[ZbarOverlayViewalloc]initWithFrame:CGRectMake(0,0, reader.frame.size.width, reader.frame.size.height)];

   //[_overLayView startAnimation];

   _overLayView.transparentArea =CGRectMake(50,100, kScreenWidth-100,kScreenWidth-100);//设置中间可选框大小

    [readeraddSubview:_overLayView];

   //设置扫描识别框

    reader.scanCrop=CGRectMake(0,0, 1,1);

    

}

//扫描结果的代理方法

#pragma mark - ZbarReaderView Delegate

- (void) readerView:(ZBarReaderView *)readerView didReadSymbols: (ZBarSymbolSet *)symbols fromImage:(UIImage *)image

{

    ZBarSymbol * s =nil;

    for (sin symbols)

    {

//s.data为识别到的二维码转换的信息,开发者进行各种处理

        [selfgetTicketDetailInfo:s.data];

        break;

    }

//如果没有扫描到二维码信息,进行报错提示

    UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:nilmessage:@"没有识别到图片中二维码"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"确定",nil];

    

    [alert show];

  

}




//调用相册图片并识别其中二维码信息代码:

 定义全局变量:ZBarReaderController *imagePicker;

//打开相册操作

ZBarReaderController相当于对bar系统相册的一个封装

-(void)rightBtnClick

{


   imagePicker = [ZBarReaderControllernew];

    

    imagePicker.allowsEditing =NO   ;

    

    imagePicker.showsHelpOnFail =NO;

    

    imagePicker.readerDelegate =self;

    

    imagePicker.sourceType =UIImagePickerControllerSourceTypePhotoLibrary;

    

    [selfpresentViewController:imagePickeranimated:YEScompletion:nil];


}

#pragma mark - ZBarReaderController ReadDelegate

//相册选取图片后的代理方法对应ZBarReaderController

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{

    

    id<NSFastEnumeration> results = [infoobjectForKey:ZBarReaderControllerResults];

    

    ZBarSymbol *symbol =nil;

    

    for(symbol in results) {

        NSLog(@"symbol:%@", symbol);

        break;

    }

    

    [imagePicker dismissViewControllerAnimated:YEScompletion:nil];

    

    

    //二维码字符串

    NSString *QRCodeString =  symbol.data;

   //处理二维码图片信息 

   [self getTicketDetailInfo:QRCodeString];

    

}

//选择图片没有二维码信息的代理方法

-(void)readerControllerDidFailToRead:(ZBarReaderController *)reader withRetry:(BOOL)retry

{

    if (retry) {

        //retry == 1 选择图片为非二维码。

        

        UIAlertView *alert = [[UIAlertViewalloc]initWithTitle:nilmessage:@"没有识别到图片中二维码"delegate:selfcancelButtonTitle:nilotherButtonTitles:@"确定",nil];

        

        [alert show];

        

        [self dismissViewControllerAnimated:YEScompletion:nil];

        

    }

    return;

}



0 0