ios如何生成二维码

混江龙づ霸主 提交于 2020-01-26 14:29:51

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];
}

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!