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

来源:互联网 发布:谷歌tts语音数据 编辑:程序博客网 时间:2024/05/01 09:59

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;// 将字符串转换成NSdataNSData *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.最终实现的效果如下:
还是很清楚的!

0 0
原创粉丝点击