IOS开发技巧快速生成二维码

随着移动互联网的发展,二维码应用非常普遍,各大商场,饭店,水果店 基本都有二维码的身影,那么ios中怎么生成二维码呢? 下面的的程序演示了快速生成二维码的方法:

在ios里面要生成二维码,需要借助一个框架:#import <CoreImage/CoreImage.h>  所有首先我们需要在我们的项目中引入这个框架

下面是核心代码:

准备工作:首先在storyboard里面添加一个UIImageView 然后脱线 到控制器里面 起名为imageView 然后再控制器的viewDidload里面写上如下代码即可生成二维码:

//创建过滤器
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; //恢复默认设置
[filter setDefaults]; //添加数据
NSString *str = @"http://www.xianhua.cn";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding]; [filter setValue:data forKeyPath:@"inputMessage"]; //输出图片
CIImage *image = [filter outputImage]; //显示图片
 self.imageView.image = [UIImage imageWithCIImage:image];
   

运行效果如下:

IOS开发技巧快速生成二维码

通过上面的简单代码就能够生成一个二维码了,但是 细心的你 可能会发现 我们通过上面的代码生成的二维码 很模糊,给用户体验不是很好,这个时候 我们就需要对图片进行处理了

这里提供一个方法,是采用位图的方式对图片进行处理的 如果你看不懂没关系 只需要将其放入到你的项目中即可了,代码如下:

/**
* 根据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, , , 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];
}

有了这个方法之后,接下来我们只需要对我们刚开始的代码稍稍做一点修改就大工告成了 修改如下:

IOS开发技巧快速生成二维码

就修改了一行代码,然后引入了处理图片的一个方法,允许效果如下:

IOS开发技巧快速生成二维码

看到了吧,是不是比刚开始清晰多了哈, 好了 关于二维码的生成 就讲到这里了 下一节 我们介绍下 二维码的扫描

上一篇:Kafka 2.1.0压缩算法性能测试


下一篇:Effective Java Item4:Enforce noninstantiability with a private constructor