標籤:apc 注意 sda 過濾器 rpo imp getwidth url inf
這篇部落格將會介紹二維碼的產生。
由於沒有什麼東西值得長篇大論的,所以這裡我就通過代碼的實現介紹二維碼。
第一部分
第一部分是二維碼的簡單產生沒有其他重點介紹。
代碼部分
//// ViewController.m// CX 二維碼產生//// Created by ma c on 16/4/12.// Copyright ? 2016年 bjsxt. All rights reserved.//#import "ViewController.h"#import <CoreImage/CoreImage.h>@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; }- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //建立過濾器 CIFilter * filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; //恢複預設設定 [filter setDefaults]; //給過濾器添加資料 NSString * str = @"旭寶愛吃魚";//這裡的文本可以是URL NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding]; [filter setValue:data forKey:@"inputMessage"]; //輸出擷取的二維碼 CIImage * image = [filter outputImage]; //顯示二維碼 UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 20, 100, 100)]; imageView.image = [UIImage imageWithCIImage:image]; [self.view addSubview:imageView]; }@end
雖然說很簡單,但是值得注意的是原生架構中的方法產生的二維碼是CI的因此我們在顯示之前要處理一下。
掃描第一部分出來的是一段文字,當然按照注釋如果你加入url也可以彈出網站。
如果仔細觀察不難發現,二位碼的清晰度並不高。我在下面介紹一下使其清晰度變高的方法。
第二部分
第二部分介紹的是使二維碼的清晰度變高的方法。
代碼部分
//// ViewController.m// CX 二維碼產生//// Created by ma c on 16/4/12.// Copyright ? 2016年 bjsxt. All rights reserved.//#import "ViewController.h"#import <CoreImage/CoreImage.h>@interface ViewController ()@end@implementation ViewController- (void)viewDidLoad { [super viewDidLoad]; }- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ //建立過濾器 CIFilter * filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; //恢複預設設定 [filter setDefaults]; //給過濾器添加資料 NSString * str = @"旭寶愛吃魚";//這裡的文本可以是URL NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding]; [filter setValue:data forKey:@"inputMessage"]; //輸出擷取的二維碼 CIImage * image = [filter outputImage]; //顯示二維碼 UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(20, 20, 100, 100)]; imageView.image = [self createNonInterpolatedUIImageFormCIImage:image withSize:200]; [self.view addSubview:imageView];}/** * 根據CIImage產生指定大小的UIImage * * @param image CIImage * @param size 圖片寬度 */- (UIImage *)createNonInterpolatedUIImageFormCIImage:(CIImage *)image withSize:(CGFloat) size{ CGRect extent = CGRectIntegral(image.extent); CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent)); // 1.建立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];}@end
值得注意的是這個方法可以變為類別。
這些弄好之後我們要想一想很多時候二維碼中間是有圖片的該怎麼做呢???
很簡單只要自己弄張圖片覆蓋在二維碼中間即可(注意圖片尺寸掌握好)
IOS 二維碼產生