二維碼的介紹
二維碼是用特定的幾何圖形來記錄信息
在之前,常用的二維碼開發(fā)框架有:ZXing和ZBarSDK
蘋果從iOS7開始集成了二維碼的生成和讀取功能,并且之前的框架不支持64位,因此目前只是用蘋果的框架即可
二維碼的生成
二維碼的生成就是將固定的信息生成對應的二維碼
生成二維碼的步驟:
?。?)。導入CoreImage框架
(2)。通過濾鏡CIFilter生成二維碼
《1》。創(chuàng)建濾鏡對象
《2》。設置濾鏡的默認設置
《3》。給濾鏡設置數(shù)據(jù)(KVC)
《4》。獲取生成的二維碼圖形
二維碼的生成(此列是根據(jù)一段文本生成一個二維碼的圖片)
1.1 創(chuàng)建用于生成二維碼濾鏡
CIFilter *qrFilter = [CIFilter filterWithName:@“CIQRCodeGenerator”];
NSData *messageData = [@“最近好嗎?” dataUsingEncoding:NSUTF8StringEncoding];
// 1.2 設置二維濾鏡的輸入
?。踧rFilter setValue:messageData forKey:@“inputMessage”];
// 1.3取出圖片
CIImage *ciImage = qrFilter.outputImage;
// 1.4 放大圖片
ciImage = [ciImage imageByApplyingTransform:CGAffineTransformMakeScale(8, 8)];
#pragma mark - 修改二維碼的前景色和背景色
// 修改二維碼的前景色和背景色,當你修改了前景色或背景色都會降低圖片的識別度
CIFilter *falseColorFilter = [CIFilter filterWithName:@“CIFalseColor”];
// inputImage, 圖片
// inputColor0, 前景顏色
// inputColor1 背景色
// 這三個參數(shù)都是CoreImage中的對象
// NSLog(@“%@”,falseColorFilter.inputKeys);
// 圖片
?。踗alseColorFilter setValue:ciImage forKey:@“inputImage”];
// 前景色
?。踗alseColorFilter setValue:[CIColor colorWithRed:1 green:0 blue:0] forKey:@“inputColor0”];
// 背景色
[falseColorFilter setValue:[CIColor colorWithRed:0 green:0 blue:1] forKey:@“inputColor1”];
// 取出濾鏡中的圖片
ciImage = falseColorFilter.outputImage;
// 二維碼上面添加頭像,也會降低二維碼的識別度
UIImage *qrImage = [UIImage imageWithCIImage:ciImage];
#pragma mark - 在原來的二維碼的圖片上畫一個頭像
// 在原來的二維碼的圖片上畫一個頭像
// 開啟圖片上下文
UIGraphicsBeginImageContext(qrImage.size);
// 繪制二維碼圖片
?。踧rImage drawInRect:CGRectMake(0, 0, qrImage.size.width, qrImage.size.height)];
// 繪制頭像
UIImage *headImage = [UIImage imageNamed:@“cang”];
CGFloat headW = qrImage.size.width * 0.2;
CGFloat headH = qrImage.size.height * 0.2;
CGFloat headX = (qrImage.size.width - headW) * 0.5;
CGFloat headY = (qrImage.size.height - headH) * 0.5;
[headImage drawInRect:CGRectMake(headX, headY, headW, headH)];
// 從圖片上下文中取出圖片
qrImage = UIGraphicsGetImageFromCurrentImageContext();
// 關閉圖片上下文
UIGraphicsEndImageContext();
// 1.6 把CIImage轉換為UIImage
self.imageView.image = qrImage;
效果圖:
生成二維碼 帶 中間icon ,并且?guī)в嘘幱靶Ч?/strong>
?。踥bjc] view plain copy print?
//指定UIImageView 的 rect 大小
CGRect rect = CGRectMake(10, 10, [UIScreen mainScreen].bounds.size.width - 20, [UIScreen mainScreen].bounds.size.width - 20);
//然后,返回一個QRCode圖片,通過指定大小的rect和數(shù)據(jù)字符串,中間帶一個icon, 并且有陰影效果
UIImage *center = [UIImage imageNamed:@“centericon”];
UIImageView *myImage = [[[ZRQRCodeViewController alloc] init] generateQuickResponseCodeWithFrame:rect dataString:@“https://www.baidu.com” centerImage:center needShadow:YES];
1、生成原理 通過一個類CIFilter(濾鏡)包含二維碼中所有的信息,然后生成一張二維碼圖片 二維碼中間的icon(頭像),是通過在生成的圖片上添加一張圖片實現(xiàn)的
2、生成步驟 創(chuàng)建濾鏡 初始化濾鏡 添加二維碼信息 獲取生成的二維碼圖片 將二維碼圖片展示出來
評論
查看更多