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

    xiaoxiao2021-03-25  109

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

    //打开相机

    - (void) init_camera

    {

        self.navigationController.navigationBarHidden=YES;

        [common addNavigationAddToView:self.view Info:@"二维码" Target:self action:@selector(returnbtn:) PatientName:@"扫码"];

        

        

        UIButton *rightBtn=[UIButton buttonWithType:UIButtonTypeCustom];

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

        [rightBtn setTitle:@"相册" forState:UIControlStateNormal];

        [rightBtn.titleLabel setFont:[UIFont systemFontOfSize:16]];

        [self.view addSubview:rightBtn];

        [rightBtn addTarget:self action:@selector(rightBtnClick) forControlEvents:UIControlEventTouchUpInside];

        

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

        ZBarReaderView * reader = [ZBarReaderView new];

        ZBarImageScanner * scanner = [ZBarImageScanner new];

        [scanner setSymbology:ZBAR_PARTIAL config:0 to:0];

        reader.readerDelegate = self;

        const float h = [UIScreen mainScreen].bounds.size.height;

        const float w = [UIScreen mainScreen].bounds.size.width;

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

        reader.frame = reader_rect1;

        reader.backgroundColor = [UIColor redColor];

        [reader start];

        [self.view addSubview: reader];

        

        //添加覆盖视图

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

        //[_overLayView startAnimation];

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

        [reader addSubview:_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 (s in symbols)

        {

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

            [self getTicketDetailInfo:s.data];

            break;

        }

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

        UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:@"没有识别到图片中二维码" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定", nil];

        

        [alert show];

      

    }

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

     定义全局变量:ZBarReaderController *imagePicker;

    //打开相册操作

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

    -(void)rightBtnClick

    {

       imagePicker = [ZBarReaderController new];

        

        imagePicker.allowsEditing = NO   ;

        

        imagePicker.showsHelpOnFail = NO;

        

        imagePicker.readerDelegate = self;

        

        imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

        

        [self presentViewController:imagePicker animated:YES completion:nil];

    }

    #pragma mark - ZBarReaderController ReadDelegate

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

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

        

        id<NSFastEnumeration> results = [info objectForKey:ZBarReaderControllerResults];

        

        ZBarSymbol *symbol = nil;

        

        for(symbol in results) {

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

            break;

        }

        

        [imagePicker dismissViewControllerAnimated:YES completion:nil];

        

        

        //二维码字符串

        NSString *QRCodeString =  symbol.data;

       //处理二维码图片信息 

       [self getTicketDetailInfo:QRCodeString];

        

    }

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

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

    {

        if (retry) {

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

            

            UIAlertView *alert = [[UIAlertView alloc]initWithTitle:nil message:@"没有识别到图片中二维码" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定", nil];

            

            [alert show];

            

            [self dismissViewControllerAnimated:YES completion:nil];

            

        }

        return;

    }

    转载请注明原文地址: https://ju.6miu.com/read-3425.html

    最新回复(0)