zoukankan      html  css  js  c++  java
  • iOS中的原生框架生成二维码

    一、二维码的生成

    • 从iOS7开始集成了二维码的生成和读取功能
    • 此前被广泛使用的ZBarSDK 目前不支持64位处理器,除此之外还有ZXingSDK也可以生成二维码
    • 生成二维码的步骤
      • 导入CoreImage框架
      • 通过滤镜CIFilter生成二维码  
    • 二维码的内容(传统的条形码只能放数字)
      • 纯文本
      • 名片
      • URL(可直接跳转网页)

    二维码生成的具体代码

     1 - (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
     2     
     3     //创建过滤器
     4     CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
     5     
     6     //过滤器恢复默认
     7     [filter setDefaults];
     8     
     9     //给过滤器添加数据
    10     NSString *string = @"http://www.cnblogs.com/PSSSCode/";
    11     
    12     //将NSString格式转化成NSData格式
    13     NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
    14     
    15     [filter setValue:data forKeyPath:@"inputMessage"];
    16     
    17     //获取二维码过滤器生成的二维码
    18     CIImage *image = [filter outputImage];
    19     
    20     //将获取到的二维码添加到imageview上
    21     self.imageView.image =[UIImage imageWithCIImage:image];

    从上图可以看出生成的二维码模糊不清晰,在上面代码块最后一步换成调用下面代码块中的方法即可

     1 /**
     2  *  根据CIImage生成指定大小的UIImage
     3  *
     4  *  @param image CIImage
     5  *  @param size  图片宽度
     6  */
     7 - (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size
     8 {
     9     CGRect extent = CGRectIntegral(image.extent);
    10     CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
    11     
    12     // 1.创建bitmap;
    13     size_t width = CGRectGetWidth(extent) * scale;
    14     size_t height = CGRectGetHeight(extent) * scale;
    15     CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
    16     CGContextRef bitmapRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
    17     CIContext *context = [CIContext contextWithOptions:nil];
    18     CGImageRef bitmapImage = [context createCGImage:image fromRect:extent];
    19     CGContextSetInterpolationQuality(bitmapRef, kCGInterpolationNone);
    20     CGContextScaleCTM(bitmapRef, scale, scale);
    21     CGContextDrawImage(bitmapRef, extent, bitmapImage);
    22     
    23     // 2.保存bitmap到图片
    24     CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
    25     CGContextRelease(bitmapRef);
    26     CGImageRelease(bitmapImage);
    27     return [UIImage imageWithCGImage:scaledImage];
    28 }

    正常代码生成的二维码                调用代码后生成的二维码

           

  • 相关阅读:
    Discuz上传错误
    Node.js程序在node-windows中不能运行
    如何开机就启动node.js程序
    创建并发布node.js module
    Windows下安装mongodb
    Grunt学习一:使用grunt创建jquery plugin.
    如何用 Jquery实现OuterHtml
    VS2008中生成DLL项目
    C++变量未进行初始化时的默认值
    C++的四种初始化形式以及类型转换
  • 原文地址:https://www.cnblogs.com/PSSSCode/p/5487390.html
Copyright © 2011-2022 走看看