设为首页 加入收藏

TOP

IOS 二维码生成(一)
2017-10-13 10:24:07 】 浏览:4116
Tags: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到图片
    CGImageR
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇cornerstone提示“SQLite-databas.. 下一篇【代码笔记】iOS-两个时间字符串..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目