简介
前些天过情人节,不知道怎么跟女友说点甜言蜜语.于是想到了,用二维码,向女友说说密语.也展示下我们程序员的小浪漫.
其实实现简单地二维码,代码步骤并不多, 也不难.,下面,我就为大家介绍下,我的实现过程
模糊的二维码
首先在VC中铺设了一个UITextFiled,一个UIButton,一个UIImageView
UITextFiled用来输入.你要生成的文字. UIButton一个点击事件,确定生成.UIImageView用来呈现生成的二维码
- (IBAction)handleCreate:(id)sender {
/** 回收键盘. */
[self.textField resignFirstResponder];
/** 1.实例化二维码滤镜. */
/**
* CIFilter用来表示CoreImage提供的各种滤镜。滤镜使用键-值来设置输入值,这些值设置好之后,CIFilter就可以用来生成新的CIImage输出图像。这里的输出的图像不会进行实际的图像渲染。
*
*/
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
/** 2.恢复滤镜的默认属性(因为滤镜有可能保存上一次的属性)*/
[filter setDefaults];
/** 3.将字符串转换成NSData. */
NSData *data = [self.textField.text dataUsingEncoding:NSUTF8StringEncoding];
/** 4.通过kvc设置滤镜, 传入data, 将来滤镜就知道要通过数据生成二维码. */
[filter setValue:data forKey:@"inputMessage"];
/** 5.生成二维码. */
CIImage *image = [filter outputImage];
// CIImage 是CoreImage框架中最基本代表图像的对象, 他不仅包含原图像上的数据, 还包括原图像上的滤镜链
// UIImage *image1 = [UIImage imageWithCIImage:image];
// 注:像这样直接将CIImage转换成UIImage画面会比较模糊
/** 6. 设置生成好的二维码到imageView上. */
// self.imageOfErweima.image = image1;
// 下面是生成清晰的二维码
self.imageOfErweima.image = [self createNonInterpolatedUIImageFormCIImage:image 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];
}
总结
这就我的一个随笔, 可能有很多问题,希望大家多提宝贵意见,如果有人用到了,那我更加开心.谢谢大家.