IOS 二维码生成

Posted 吴雨欣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IOS 二维码生成相关的知识,希望对你有一定的参考价值。

 这篇博客将会介绍二维码的生成。

 由于没有什么东西值得长篇大论的,所以这里我就通过代码的实现介绍二维码。

第一部分

第一部分是二维码的简单生成没有其他重点介绍。

效果图

代码部分

复制代码
//
//  ViewController.m
//  CX 二维码生成
//
//  Created by ma c on 16/4/12.
//  Copyright © 2016年 bjsxt. All rights reserved.
//

#import "ViewController.h"
#import <CoreImage/CoreImage.h>
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
    //创建过滤器
    CIFilter * filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    //恢复默认设置
    [filter setDefaults];
    //给过滤器添加数据
    NSString * str = @"旭宝爱吃鱼";//这里的文本可以是URL
    NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];
    [filter setValue:data forKey:@"inputMessage"];
    //输出获取的二维码
     CIImage * image = [filter outputImage];
    //显示二维码
    UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 20, 100, 100)];
    imageView.image = [UIImage imageWithCIImage:image];
    [self.view addSubview:imageView];
    
}

@end
复制代码

虽然说很简单,但是值得注意的是原生框架中的方法生成的二维码是CI的因此我们在显示之前要处理一下。

扫描第一部分出来的是一段文字,当然按照注释如果你加入url也可以弹出网站。

如果仔细观察不难发现,二位码的清晰度并不高。我在下面介绍一下使其清晰度变高的方法。

第二部分

第二部分介绍的是使二维码的清晰度变高的方法。

效果图


代码部分

复制代码
//
//  ViewController.m
//  CX 二维码生成
//
//  Created by ma c on 16/4/12.
//  Copyright © 2016年 bjsxt. All rights reserved.
//

#import "ViewController.h"
#import <CoreImage/CoreImage.h>
@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
}

- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    
    //创建过滤器
    CIFilter * filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    //恢复默认设置
    [filter setDefaults];
    //给过滤器添加数据
    NSString * str = @"旭宝爱吃鱼";//这里的文本可以是URL
    NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];
    [filter setValue:data forKey:@"inputMessage"];
    //输出获取的二维码
     CIImage * image = [filter outputImage];
    //显示二维码
    UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 20, 100, 100)];
    imageView.image = [self createNonInterpolatedUIImageFormCIImage:image withSize:200];
    [self.view addSubview:imageView];

}

/**
 *  根据CIImage生成指定大小的UIImage
 *
 *  @param image CIImage
 *  @param size  图片宽度
 */
- (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];
}
@end
复制代码

值得注意的是这个方法可以变为类别。

这些弄好之后我们要想一想很多时候二维码中间是有图片的该怎么做呢???

很简单只要自己弄张图片覆盖在二维码中间即可(注意图片尺寸掌握好)

 

以上是关于IOS 二维码生成的主要内容,如果未能解决你的问题,请参考以下文章

pbootcms对接微信扫码登录代码核心片段和步骤(前后端)

iOS 如何生成跳转到Appstore的链接及二维码

iOS原生CIFilter创建二维码

iOS 简单易用的二维码扫描及生成二维码三方控件LFQRCode,可灵活自定义UI

iOS开发 - 二维码的生成与读取

iOS开发 二维码生成