前一段時(shí)間做了一個(gè)關(guān)于跑腿的App,有一個(gè)需求就是后臺給每一個(gè)用戶一個(gè)唯一的鏈接屈扎,這個(gè)鏈接邀請好友注冊獲得獎勵红符。在App上以二維碼的方式展示枷畏,現(xiàn)在給出我的二維碼生成的方式和代碼
1.主要是中間帶圖片的二維碼
/**
生成二維碼
@param url 二維碼的URL
@param View 添加到哪一個(gè)View上面
*/
- (void)setErWeiMaWithUrl:(NSString *)url AndView:(UIView *)View{
// 1勇劣、創(chuàng)建濾鏡對象
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
// 恢復(fù)濾鏡的默認(rèn)屬性
[filter setDefaults];
// 2堕战、設(shè)置數(shù)據(jù)
NSString *string_data = url;
// 將字符串轉(zhuǎn)換成 NSdata (雖然二維碼本質(zhì)上是字符串, 但是這里需要轉(zhuǎn)換, 不轉(zhuǎn)換就崩潰)
NSData *qrImageData = [string_data dataUsingEncoding:NSUTF8StringEncoding];
// 設(shè)置過濾器的輸入值, KVC賦值
[filter setValue:qrImageData forKey:@"inputMessage"];
// 3补君、獲得濾鏡輸出的圖像
CIImage *outputImage = [filter outputImage];
// 圖片小于(27,27),我們需要放大
outputImage = [outputImage imageByApplyingTransform:CGAffineTransformMakeScale(20, 20)];
// 4引几、將CIImage類型轉(zhuǎn)成UIImage類型
UIImage *start_image = [UIImage imageWithCIImage:outputImage];
// - - - - - - - - - - - - - - - - 添加中間小圖標(biāo) - - - - - - - - - - - - - - - -
// 5、開啟繪圖, 獲取圖形上下文 (上下文的大小, 就是二維碼的大小)
UIGraphicsBeginImageContext(start_image.size);
// 把二維碼圖片畫上去 (這里是以圖形上下文, 左上角為(0,0)點(diǎn)
[start_image drawInRect:CGRectMake(0, 0, start_image.size.width, start_image.size.height)];
// 再把小圖片畫上去
NSString *icon_imageName = @"icon_image";
UIImage *icon_image = [UIImage imageNamed:icon_imageName];
CGFloat icon_imageW = 200;
CGFloat icon_imageH = icon_imageW;
CGFloat icon_imageX = (start_image.size.width - icon_imageW) * 0.5;
CGFloat icon_imageY = (start_image.size.height - icon_imageH) * 0.5;
[icon_image drawInRect:CGRectMake(icon_imageX, icon_imageY, icon_imageW, icon_imageH)];
// 6挽铁、獲取當(dāng)前畫得的這張圖片
UIImage *final_image = UIGraphicsGetImageFromCurrentImageContext();
// 7伟桅、關(guān)閉圖形上下文
UIGraphicsEndImageContext();
// 8、借助UIImageView顯示二維碼
UIImageView *imageView = [[UIImageView alloc] init];
CGFloat imageViewW = 110;
CGFloat imageViewH = imageViewW;
CGFloat imageViewX = 0;
CGFloat imageViewY = 0;
imageView.frame =CGRectMake(imageViewX, imageViewY, imageViewW, imageViewH);
[View addSubview:imageView];
// 9叽掘、將最終合得的圖片顯示在UIImageView上
imageView.image = final_image;
}
2.不帶小圖片的二維碼
// 生成二維碼
- (void)setupGenerateQRCode {
// 1楣铁、創(chuàng)建濾鏡對象
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
// 恢復(fù)濾鏡的默認(rèn)屬性
[filter setDefaults];
// 2、設(shè)置數(shù)據(jù)
NSString *info = @"https://github.com/kingsic";
// 將字符串轉(zhuǎn)換成
NSData *infoData = [info dataUsingEncoding:NSUTF8StringEncoding];
// 通過KVC設(shè)置濾鏡inputMessage數(shù)據(jù)
[filter setValue:infoData forKeyPath:@"inputMessage"];
// 3更扁、獲得濾鏡輸出的圖像
CIImage *outputImage = [filter outputImage];
// 4盖腕、借助UIImageView顯示二維碼
UIImageView *imageView = [[UIImageView alloc] init];
CGFloat imageViewW = 150;
CGFloat imageViewH = imageViewW;
CGFloat imageViewX = (self.view.frame.size.width - imageViewW) / 2;
CGFloat imageViewY = 80;
imageView.frame =CGRectMake(imageViewX, imageViewY, imageViewW, imageViewH);
[self.view addSubview:imageView];
// 5赫冬、將CIImage轉(zhuǎn)換成UIImage,并放大顯示
imageView.image = [outputImage SG_createNonInterpolatedWithSize:imageViewW];
}
demo還有設(shè)計(jì)掃描溃列,有興趣的可以看一下
原文地址http://www.cocoachina.com/ios/20161009/17696.html
GitHub下載地址: https://github.com/kingsic/SGQRCode.git