iOS开发之原生二维码生成

来源:互联网 发布:唱歌培训软件 编辑:程序博客网 时间:2024/05/01 19:38

1.首先在storyboard上拖几个控件:一个UITextField,一个UIButton,一个UIImageView


 1.1关联属性

@property (weak,nonatomic) IBOutletUITextField *txt;

@property (weak, nonatomic) IBOutletUIImageView *img;

1.2给 button 添加点击事件

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

    

    [self.txtresignFirstResponder];

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

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

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

    [filter setDefaults];

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

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

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

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

   //5.生成二维码

    CIImage *icon = [filter outputImage];

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

//    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 = [CIContextcontextWithOptions: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 [UIImageimageWithCGImage:scaledImage];

}





0 0
原创粉丝点击