您的位置:首页 > 移动开发 > IOS开发

iOS开发---原生高清二维码生成

2016-02-24 17:26 471 查看
1.导入
#import <CoreImage/CoreImage.h>


2.创建一个
@property (nonatomic, strong)UIImageView *imageView;


3.具体代码实现

`- (void)viewDidLoad {

[super viewDidLoad];

UIImageView *imageView = [[UIImageView alloc] init];
imageView.backgroundColor = [UIColor whiteColor];
[self.view addSubview:imageView];
[imageView mas_makeConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(150, 150));
make.center.mas_equalTo(self.view);
}];

// 实例化二维码滤镜
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
// 恢复滤镜的默认属性
[filter setDefaults];

NSString *phoneNum =[YNUser currentUser].sa_mobile;
// 将字符串转换成NSdata
NSData *data = [phoneNum dataUsingEncoding:NSUTF8StringEncoding];
// 通过KVO设置滤镜, 传入data, 将来滤镜就知道要通过传入的数据生成二维码
[filter setValue:data forKey:@"inputMessage"];
// 设置 filter 容错等级
[filter setValue:@"M" forKey:@"inputCorrectionLevel"];
// 生成二维码
CIImage *outputImage = [filter outputImage];

imageView.image=[self createNonInterpolatedUIImageFormCIImage:outputImage withSize:200.0];


}

// 根据CIImage生成指定大小的UIImage

- (UIImage )createNonInterpolatedUIImageFormCIImage:(CIImage )image withSize:(CGFloat) size {

CGRect extent = CGRectIntegral(image.extent);
CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
// 创建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);

// 保存bitmap到图片
CGImageRef scaledImage = CGBitmapContextCreateImage(bitmapRef);
CGContextRelease(bitmapRef);
CGImageRelease(bitmapImage);
return [UIImage imageWithCGImage:scaledImage];


}

`

4.最终实现的效果如下:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息