二维码生成与扫描

简介:

 生成二维码


20     某些二维码中间有图片,可以直接在imageView添加图片居中

     

    //1.创建过滤器

    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];

     

    //2.恢复默认

    [filter setDefaults];

     

    //3.给过滤器添加数据

    NSString *str = @"二维码学习"; //也直接输出网址,扫描会自动跳转

    NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];

    [filter setValue:data forKey:@"inputMessage"];

     

    //4.获取输出二维码

    CIImage *outputImage = [filter outputImage];

     

    //5.显示二维码

    self.imageView.image = [UIImage imageWithCIImage:outputImage];

    //解决模糊方法

    // self.imageView.image = [self createNonInterpolatedUIImageFromCIImage:outputImage withSize:200];

生成二维码解决方法


23 -(UIImage *)createNonInterpolatedUIImageFromCIImage:(CIImage *)image withSize:(CGFloat)size

{

    CGRect extent = CGRectIntegral(image.extent);

    CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));

     

    //1.创建bitmap

    size_t width = CGRectGetWidth(extent) *scale;

    size_t height = CGRectGetHeight(extent) *scale;

    CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();

    CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);

    CIContext *context = [CIContext contextWithOptions:nil];

    CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];

    CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);

    CGContextScaleCTM(bitmapRef, scale, scale);

    CGContextDrawImage(bitmapRef, extent, bitmapImage);

     

    //2.保存bitmap到图片

    CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);

    CGContextRelease(bitmapRef);

    CGImageRelease(bitmapImage);

    return [UIImage imageWithCGImage:scaledImage];

     

}



 二维码识别


49 @interface ViewController ()<AVCaptureMetadataOutputObjectsDelegate>

 

@property (weak, nonatomic)AVCaptureSession *session;

@property (weak, nonatomic)AVCaptureVideoPreviewLayer *layer;

 

- (IBAction)scan:(UIButton *)sender {

    //1.创建捕捉会话

    AVCaptureSession *session = [[AVCaptureSession alloc] init];

    self.session = session;

     

    //2.设置输入设备 设置为摄像头

    AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo];

    AVCaptureDeviceInput *inputDevice = [AVCaptureDeviceInput deviceInputWithDevice:device error:nil];

    [session addInput:inputDevice];

     

    //3.设置输出方式 代理数据输出数据

    AVCaptureMetadataOutput *output = [[AVCaptureMetadataOutput alloc] init];

    [output setMetadataObjectsDelegate:self queue:dispatch_get_main_queue()];

    [session addOutput:output];

    [output setMetadataObjectTypes:@[AVMetadataObjectTypeQRCode]];

     

    //4.添加一个显示的layer 类似摄像头拍照阅览

    AVCaptureVideoPreviewLayer *layer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session];

    layer.frame = self.view.bounds;

    [self.view.layer addSublayer:layer];

    self.layer = layer;

     

    //5.开始扫描

    [session startRunning];

 

}

 

 

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputMetadataObjects:(NSArray *)metadataObjects fromConnection:(AVCaptureConnection *)connection

{

    if (metadataObjects.count > 0) {

        //1.获取扫描结果

        AVMetadataMachineReadableCodeObject *object = [metadataObjects lastObject];

        self.outLabel.text = object.stringValue;

         

        //2.停止扫描

        [self.session stopRunning];

         

        //3.移除图层

        [self.layer removeFromSuperlayer];

    }else{

        NSLog(@"没有扫描到数据");

    }

}



 ZBarSDK的使用

导入必要的框架


1).快速集成

实现ZBarReaderDelegate协议


35 //二维码识别

-(void)sysbutbuttonclick{

    //初始化相机控制器

    ZBarReaderViewController *reader = [ZBarReaderViewController new];

     

    //设置代理

    reader.readerDelegate = self;

    //基本适配

    reader.supportedOrientationsMask = ZBarOrientationMaskAll;

     

    //二维码/条形码识别设置

    ZBarImageScanner *scanner = reader.scanner;

     

    [scanner setSymbology: ZBAR_I25

                   config: ZBAR_CFG_ENABLE

                       to: 0];

    //弹出系统照相机,全屏拍摄

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

 

}

 

- (void) imagePickerController: (UIImagePickerController*) reader

  didFinishPickingMediaWithInfo: (NSDictionary*) info

 {

     

         NSLog(@"info=%@",info);

         // 得到条形码结果

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

         ZBarSymbol *symbol = nil;

         for(symbol in results)

                 // EXAMPLE: just grab the first barcode

                 break;

       NSLog(@"%@",symbol.data);

 

}



2).自定义窗口

实现ZBarReaderViewDelegate协议

38 //二维码识别

-(void)sysbutbuttonclick{

     

    //初始化照相机窗口

    ZBarReaderView *readview = [ZBarReaderView new];

     

    //自定义大小

    readview.frame = myScreen;

    //自定义添加相关指示.........发挥各自的APP的想象力

    //此处省略美化10000行代码...................

    //………………………..

    // 好进入正题—— 接着设置好代理

    readview.readerDelegate = self;

     

    //将其照相机拍摄视图添加到要显示的视图上

    [self.view addSubview:readview];

     

     

    //二维码/条形码识别设置

    ZBarImageScanner *scanner = readview.scanner;

     

    [scanner setSymbology: ZBAR_I25

                   config: ZBAR_CFG_ENABLE

                       to: 0];

     

    //启动,必须启动后,手机摄影头拍摄的即时图像菜可以显示在readview

    [readview start];

}

 

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

{

    ZBarSymbol *symbol = nil;

    for (symbol in symbols) {

        break;

    }

     

    NSLog(@"========%@==========",symbol.data);

}











本文转自 卓行天下  51CTO博客,原文链接:http://blog.51cto.com/9951038/1757594,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
存储 BI API
使用 ABAP 代码制作手机能够扫描的二维码(QRCode)试读版
使用 ABAP 代码制作手机能够扫描的二维码(QRCode)试读版
57 1
|
4天前
|
Java Maven C++
Java在后台获取USB二维码扫描枪扫描的内容
在Java Web项目中集成扫描枪,首先发现扫描枪可模拟键盘输入,聚焦窗口即接收数据。通过官网电话得知有串口编程支持,但项目无串口,故搜索Java串口解决方案。找到开源项目,理解其工作原理。使用Java Native Access (JNA)来监听操作系统输入,解决Java JVM无法直接获取键盘输入的问题。遇到jar包缺失问题,最终在国内仓库mvnjar.com找到合适版本运行成功。实现时需注意处理字母大小写和特殊字符输入。
|
20天前
|
开发框架 Java .NET
御剑后台扫描工具下载
御剑后台扫描工具下载
16 0
|
7月前
|
前端开发
前端生成二维码记录
前端生成二维码记录
|
7月前
|
前端开发 Java
动态生成二维码
动态生成二维码
123 0
|
JSON fastjson API
微信扫描登录(获取扫描人信息) | 学习笔记
快速学习 微信扫描登录(获取扫描人信息)
103 0
|
JSON 安全 NoSQL
微信扫描登录(获取扫描人信息分析) | 学习笔记
快速学习 微信扫描登录(获取扫描人信息分析)
204 0
微信扫描登录(获取扫描人信息分析) | 学习笔记
|
API 开发者 微服务
微信扫描登录(生成二维码) | 学习笔记
快速学习 微信扫描登录(生成二维码)
76 0
|
Android开发
好用app推荐:扫描二维码、扫描条形码并查看历史
有些朋友日常生活中可能需要频繁扫描二维码,或者需要频繁扫描条形码,一般情况下我们可以直接用微信进行扫描。但是如果想记录扫描的历史,或者想对扫描的二维码、条形码进行美化、分享的话,用微信扫描就不是很方便。今天,小编给大家推荐一款我平时经常使用的手机app--二维码和条形码生成器,一款好用的、免费的扫码App,支持安卓、鸿蒙、苹果手机,快来看看怎么用吧。
|
Android开发
二维码的的扫描
二维码的的扫描
161 0
二维码的的扫描