zoukankan      html  css  js  c++  java
  • ios如何生成二维码

    ios 7以后 系统为我们集成了生成二维码和读取功能,我们可以使用系统自带的框架 来进行二维码的相关操作。 框架CoreImage框架(该框架可以做毛玻璃效果),通过滤镜CIFilter生成二维码 。

    生成二维码步骤: 包含库头文件 import <CoreImage/coreImage.h>

    1, 创建过滤器

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

    2,  恢复默认设置 

        [filter setDefaults];

    3,给过滤器添加数据

      NSString *str = @"这是一个二维码的生成结果";  (如果想让二维码是一个URL,直接将字符串改成URL地址)

      NSData *data =  [strData dataUsingEncoding:NSUTF8StringEncoding];

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

    4,获取输出的二维码

      CIImage *outPutImage = [filter outputImage];     返回的是一个CIImage

    5 , 显示二维码

      self.imageView.image =[UIImage imageWithCIImage:outPutImage];       添加到 UI控件 上。

      附: 有时候我们需要在二维码的中间 加一张小图片, 需要自己手动添加 一个 子视图,做下约束 即可。

       但是 用上面方法生成的二维码 比较模糊, 用下面这个方法 可以生成 高清晰的 二维码,直接调用该方法即可,方法如下:

         self.imageView.image = [self createNonInterpolatedUIImageFormCIImage:outPutImage  withSize:200]; 

    - (UIImage *)createNonInterpolatedUIImageFormCIImage:(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];
    }

  • 相关阅读:
    remove-duplicates-from-sorted-list
    combination-sum-ii(熟悉下Java排序)
    decode-string(挺麻烦的)
    subsets-ii(需要思考,包括了子数组的求法)
    remove-duplicates-from-sorted-array
    delete-node-in-a-linked-list
    find-all-duplicates-in-an-array(典型的数组中的重复数,不错,我做出来了,可是发现别人有更好的做法)
    【转载】大型网站架构的演进
    【转载】第三方支付平台相关-支付、对账
    【Todo】JS跨域访问问题的解决
  • 原文地址:https://www.cnblogs.com/dashengios/p/5419488.html
Copyright © 2011-2022 走看看