ios7之后系統(tǒng)框架已經(jīng)集成二維碼的生成與讀取, 這使開發(fā)變得方便很多, 并且會(huì)比第三方更加效率冒晰。
系統(tǒng)二維碼主要通過(guò)CIFilter的對(duì)象來(lái)完成
首先我們需要先導(dǎo)入這個(gè)類所在的框架:
#import <CoreImage/CoreImage.h>
生成二維碼
// 生成二維碼
-(UIImage *)creat2DcodeImage:(NSString *)url{
// 1. 創(chuàng)建一個(gè)二維碼濾鏡實(shí)例(CIFilter)
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
[filter setDefaults]; // 濾鏡恢復(fù)默認(rèn)設(shè)置
// 2. 給濾鏡添加數(shù)據(jù)
NSString *string = url; //根據(jù)網(wǎng)址生成
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
// 使用KVC的方式給filter賦值
[filter setValue:data forKeyPath:@"inputMessage"];
// 3. 生成二維碼
CIImage *image = [filter outputImage];
// 4. 高清處理
UIImage *newimg = [self createNonInterpolatedUIImageFormCIImage:image withSize:130.0];
// 5. 添加logo
// 開啟繪圖, 獲取圖片 上下文<圖片大小>
UIGraphicsBeginImageContext(newimg.size);
// 將二維碼圖片畫上去
[newimg drawInRect:CGRectMake(0, 0, newimg.size.width, newimg.size.height)];
// 將小圖片畫上去
UIImage *smallImage = [UIImage imageNamed:@"動(dòng)畫1"];
[smallImage drawInRect:CGRectMake((newimg.size.width - 50) / 2, (newimg.size.width - 50) / 2, 50, 50)];
// 獲取最終的圖片
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
// 關(guān)閉上下文
UIGraphicsEndImageContext();
return finalImage;
}
// 注意:logo圖片不能太大, 否則會(huì)導(dǎo)致掃描不到二維碼中的信息同衣。
生成URL的二維碼
如果我們想要生成URL的二維碼, 只需要把上面第2步中的string替換為一個(gè)URL字符串即可。
二維碼高清處理
調(diào)用以下方法即可壶运,其中的參數(shù)size最好近似等于二維碼的邊長(zhǎng)乳怎。
- (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size {
CGRect extent = CGRectIntegral(image.extent);
CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
// 1.創(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);
// 2.保存bitmap到圖片
CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
CGContextRelease(bitmapRef);
CGImageRelease(bitmapImage);
return [UIImage imageWithCGImage:scaledImage];
}
http://www.reibang.com/p/e8f7a257b612
http://www.cnblogs.com/QianChia/p/6213466.html *封裝掃描,識(shí)別前弯,生成
好用的第三方zxing