簡介
前些天過情人節(jié),不知道怎么跟女友說點甜言蜜語.于是想到了,用二維碼,向女友說說密語.也展示下我們程序員的小浪漫.
其實實現(xiàn)簡單地二維碼,代碼步驟并不多, 也不難.,下面,我就為大家介紹下,我的實現(xiàn)過程
模糊的二維碼
首先在VC中鋪設(shè)了一個UITextFiled,一個UIButton,一個UIImageView
UITextFiled用來輸入.你要生成的文字. UIButton一個點擊事件,確定生成.UIImageView用來呈現(xiàn)生成的二維碼
- (IBAction)handleCreate:(id)sender {
/** 回收鍵盤. */
[self.textField resignFirstResponder];
/** 1.實例化二維碼濾鏡. */
/**
* CIFilter用來表示CoreImage提供的各種濾鏡。濾鏡使用鍵-值來設(shè)置輸入值,這些值設(shè)置好之后膝但,CIFilter就可以用來生成新的CIImage輸出圖像姨俩。這里的輸出的圖像不會進行實際的圖像渲染倍奢。
*
*/
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
/** 2.恢復(fù)濾鏡的默認(rèn)屬性(因為濾鏡有可能保存上一次的屬性)*/
[filter setDefaults];
/** 3.將字符串轉(zhuǎn)換成NSData. */
NSData *data = [self.textField.text dataUsingEncoding:NSUTF8StringEncoding];
/** 4.通過kvc設(shè)置濾鏡, 傳入data, 將來濾鏡就知道要通過數(shù)據(jù)生成二維碼. */
[filter setValue:data forKey:@"inputMessage"];
/** 5.生成二維碼. */
CIImage *image = [filter outputImage];
// CIImage 是CoreImage框架中最基本代表圖像的對象, 他不僅包含原圖像上的數(shù)據(jù), 還包括原圖像上的濾鏡鏈
// UIImage *image1 = [UIImage imageWithCIImage:image];
// 注:像這樣直接將CIImage轉(zhuǎn)換成UIImage畫面會比較模糊
/** 6. 設(shè)置生成好的二維碼到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);
//設(shè)置比例
CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
// 創(chuàng)建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];
}
總結(jié)
這就我的一個隨筆, 可能有很多問題,希望大家多提寶貴意見,如果有人用到了,那我更加開心.謝謝大家.