iOS 二维码生成

来源:互联网 发布:淘宝上架宝贝教程 手机 编辑:程序博客网 时间:2024/06/17 00:40
//1. 初始化二维码滤镜CIFilter *filter = [CIFilter filterWithName:@"CSXRCode"];// 2. 设置滤镜的默认属性[filter setDefaults];// 3. 将需要转换成二维码的url字符串转换成NSDataNSString *urlStr = self.dataDic[@"shareurl"];NSData *data = [urlStr dataUsingEncoding:NSUTF8StringEncoding];// 4. 通过KVO设置滤镜inputMessage数据[filter setValue:data forKey:@"inputMessage"];// 5. 获得滤镜输出的图像CIImage *outputImage = [filter outputImage];// 6. 将CIImage转换成UIImage,并显示于imageView上 (此时获取到的二维码比较模糊,所以需要用下面的createNonInterpolatedUIImageFormCIImage方法重绘二维码)self.QRcodeContentImageView = [[UIImageView alloc] initWithFrame:CGRectMake((SCREEN_WIDTH-170)/2, CGRectGetMaxY(nameLabel.frame) + 10, 170, 170)];self.QRcodeContentImageView.image = [self createNonInterpolatedUIImageFormCIImage:outputImage withSize:170];//重绘二维码,使其显示清晰[self.view addSubview:self.QRcodeContentImageView];

//重绘图像,让图像看起来更清晰。
/** * 根据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];}






原创粉丝点击