iOS开发之原生二维码生成

本文介绍如何在iOS应用中使用CoreImage框架生成二维码,并提供了一个清晰的步骤指南,包括UI控件的配置、二维码滤镜的使用及高清二维码图像的创建。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

    //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 = [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];

}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值