您的位置:首页 > 移动开发 > IOS开发

iOS开发之原生二维码生成

2016-05-06 21:57 561 查看
1.首先在storyboard上拖几个控件:一个UITextField,一个UIButton,一个UIImageView

 1.1关联属性


@property (weak,
nonatomic) IBOutlet
UITextField *txt;

@property (weak,
nonatomic) IBOutlet
UIImageView *img;

1.2给 button 添加点击事件

- (IBAction)generate:(UIButton *)sender {

    

    [self.txt
resignFirstResponder];

   
//1.实例化二维码滤镜

    CIFilter *filter = [CIFilter
filterWithName:@"CIQRCodeGenerator"];//CIFilter用来表示CoreImage提供的各种滤镜。滤镜使用键-值来设置输入值,这些值设置好之后,CIFilter就可以用来生成新的CIImage输出图像。这里的输出的图像不会进行实际的图像渲染。

   
//2.恢复滤镜的默认属性(因为滤镜有可能保存上一次的属性)

    [filter setDefaults];

    //3.将字符串转化成 NSData

    NSData *data = [self.txt.text
dataUsingEncoding:NSUTF8StringEncoding];

   
//4.通过KVC设置滤镜,传入data,将来滤镜就知道要通过传入的数据生成二维码

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

   
//5.生成二维码

    CIImage *icon = [filter
outputImage];

   
//CIImage是CoreImage框架中最基本代表图像的对象,他不仅包含元图像数据,还包含作用在原图像上的滤镜链。

//    UIImage *image1 = [UIImage imageWithCIImage:icon];

   
//注:像这样将CIImage直接转换成UIImage生成的二维码会比较模糊,但是简单,也可以扫描出信息。

    //6.设置生成号的二维码显示到 imageView上

//    self.img.image = image1;

    

   

//生成高清二维码图像

    self.img.image
= [self
createNonInterpolatedUIImageFormCIImage:icon withSize:100.0];

}

- (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size {

    CGRect extent =
CGRectIntegral(image.extent);

    //设置比例

    CGFloat scale =
MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));

    //
创建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);

    //
保存bitmap到图片

    CGImageRef scaledImage =
CGBitmapContextCreateImage(bitmapRef);

    CGContextRelease(bitmapRef);

    CGImageRelease(bitmapImage);

    return [UIImage
imageWithCGImage:scaledImage];

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  二维码 ios开发