首先先了解一下二維碼的容錯(例如微信的二維碼中間附帶頭像圖片):
二維碼都有一定的糾錯毡泻,就是有部分污損或者破損都沒有關(guān)系翻默,照常識別腰根。但是也是有限度的
這根據(jù)生成時使用的糾錯級別而定新翎,可以有7%~%30左右的損壞(大致)缓醋,實際上保守一點更好。
基本原則:
1案糙、三個角上的“回”及“回”字周圍的底色不要動
2、中間部分和不帶“回”字的一角是可以填圖片的(中間最好)
3靴庆、如果中間有小的“回”字时捌,能不變就不變,能少變就少變
4炉抒、盡可能放大二維碼后再添加圖片奢讨,不要添加圖片后放大
5、生成時盡量選擇較高的糾錯級別
在生成二維碼后可以在中間加上圖片仍可識別焰薄。
1拿诸、二維碼的內(nèi)容(傳統(tǒng)的條形碼只能放數(shù)字)
純文本
名片
URL
2扒袖、生成二維碼的步驟:
導(dǎo)入CoreImage框架(Xcode6.4居然不用導(dǎo)入)
通過濾鏡CIFilter生成二維碼
// 1.創(chuàng)建過濾器
CIFilter*filter=[CIFilterfilterWithName:@"CIQRCodeGenerator"];
// 2.恢復(fù)默認(rèn)
[filter setDefaults];
// 3.給過濾器添加數(shù)據(jù)
NSString*dataString=@"http://www.520it.com";
NSData*data=[dataString dataUsingEncoding:NSUTF8StringEncoding];
// 4.通過KVO設(shè)置濾鏡inputMessage數(shù)據(jù)
[filter setValue:data forKeyPath:@"inputMessage"];
// 4.獲取輸出的二維碼
CIImage*outputImage=[filter outputImage];
// 5.將CIImage轉(zhuǎn)換成UIImage,并放大顯示
self.imageView.image=[UIImageimageWithCIImage:outputImage scale:20.0orientation:UIImageOrientationUp];
默認(rèn)情況下生成的圖片比較模糊亩码,所以要通過網(wǎng)上的代碼重繪一下,但是網(wǎng)上的代碼也看不懂
-(void)viewDidLoad{
[superviewDidLoad];
// 1.創(chuàng)建過濾器
CIFilter*filter=[CIFilterfilterWithName:@"CIQRCodeGenerator"];
// 2.恢復(fù)默認(rèn)
[filter setDefaults];
// 3.給過濾器添加數(shù)據(jù)(正則表達(dá)式/賬號和密碼)
NSString*dataString=@"http://www.520it.com";
NSData*data=[dataString dataUsingEncoding:NSUTF8StringEncoding];
[filter setValue:data forKeyPath:@"inputMessage"];
// 4.獲取輸出的二維碼
CIImage*outputImage=[filter outputImage];
// 5.將CIImage轉(zhuǎn)換成UIImage季率,并放大顯示
self.imageView.image=[selfcreateNonInterpolatedUIImageFormCIImage:outputImage withSize:200];
}
/**
* 根據(jù)CIImage生成指定大小的UIImage
*
* @param image CIImage
* @param size 圖片寬度
*/
-(UIImage*)createNonInterpolatedUIImageFormCIImage:(CIImage*)image withSize:(CGFloat)size
{
CGRectextent=CGRectIntegral(image.extent);
CGFloatscale=MIN(size/CGRectGetWidth(extent),size/CGRectGetHeight(extent));
// 1.創(chuàng)建bitmap;
size_twidth=CGRectGetWidth(extent)*scale;
size_theight=CGRectGetHeight(extent)*scale;
CGColorSpaceRefcs=CGColorSpaceCreateDeviceGray();
CGContextRefbitmapRef=CGBitmapContextCreate(nil,width,height,8,0,cs,(CGBitmapInfo)kCGImageAlphaNone);
CIContext*context=[CIContextcontextWithOptions:nil];
CGImageRefbitmapImage=[context createCGImage:image fromRect:extent];
CGContextSetInterpolationQuality(bitmapRef,kCGInterpolationNone);
CGContextScaleCTM(bitmapRef,scale,scale);
CGContextDrawImage(bitmapRef,extent,bitmapImage);
// 2.保存bitmap到圖片
CGImageRefscaledImage=CGBitmapContextCreateImage(bitmapRef);
CGContextRelease(bitmapRef);
CGImageRelease(bitmapImage);
return[UIImageimageWithCGImage:scaledImage];
}