//生成二维码 -(void)onclick_qrcode:(id)sender{ // 1. 创建一个二维码滤镜实例(CIFilter) CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"]; // 滤镜恢复默认设置 [filter setDefaults]; // 2. 给滤镜添加数据 NSString *string = @"这里是需要生成二维码的文字"; NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; // 使用KVC的方式给filter赋值 [filter setValue:data forKeyPath:@"inputMessage"]; // 3. 生成二维码 CIImage *image = [filter outputImage]; // image = [image imageByApplyingTransform:CGAffineTransformMakeScale(200, 200)]; //转成 UI的 类型 // UIImage *qrUIImage = [UIImage imageWithCIImage:image]; UIImage *qrUIImage = [self createNonInterpolatedUIImageFormCIImage:image withSize:200]; //白色框 UIImage* whiteImg = [ColorUtil colorToImage:[ColorUtil colorWithHexString:COLOR_WHITE]]; //----------------给 二维码 中间增加一个 自定义图片---------------- //开启绘图,获取图形上下文 (上下文的大小,就是二维码的大小) UIGraphicsBeginImageContext(qrUIImage.size); //把二维码图片画上去. (这里是以,图形上下文,左上角为 (0,0)点) [qrUIImage drawInRect:CGRectMake(0, 0, qrUIImage.size.width, qrUIImage.size.height)]; //再把小图片画上去 UIImage *sImage = [UIImage imageNamed:@"app_logo"]; CGFloat sImageW = qrUIImage.size.width/4; CGFloat sImageH= sImageW; CGFloat sImageX = (qrUIImage.size.width - sImageW) * 0.5; CGFloat sImgaeY = (qrUIImage.size.height - sImageH) * 0.5; //画圆角背景 [[UIBezierPath bezierPathWithRoundedRect:CGRectMake(sImageX, sImgaeY, sImageW, sImageH) cornerRadius:5] addClip]; [whiteImg drawInRect:CGRectMake(sImageX, sImgaeY, sImageW, sImageH)]; //画圆角logo [[UIBezierPath bezierPathWithRoundedRect:CGRectMake(sImageX+3, sImgaeY+3, sImageW-6, sImageH-6) cornerRadius:5] addClip]; [sImage drawInRect:CGRectMake(sImageX+3, sImgaeY+3, sImageW-6, sImageH-6)]; //获取当前画得的这张图片 UIImage *finalyImage = UIGraphicsGetImageFromCurrentImageContext(); //关闭图形上下文 UIGraphicsEndImageContext(); // 4. 显示二维码 MyLinearLayout* qrcodeLayout = [MyLinearLayout linearLayoutWithOrientation:MyLayoutViewOrientation_Vert]; qrcodeLayout.myMargin = 0; qrcodeLayout.backgroundColor = [ColorUtil colorWithHexString:COLOR_BLACK alpha:.6]; qrcodeLayout.gravity = MyMarginGravity_Center; [qrcodeLayout setTarget:self action:@selector(onclick_qrcode_close:)]; [self.view addSubview:qrcodeLayout]; UIImageView* qrcodeImg = [UIImageView new]; qrcodeImg.widthDime.equalTo(@200); qrcodeImg.heightDime.equalTo(@200); // qrcodeImg.image = [self createNonInterpolatedUIImageFormCIImage:image withSize:200]; qrcodeImg.image = finalyImage; [qrcodeLayout addSubview:qrcodeImg]; } - (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]; } -(void)onclick_qrcode_close:(MyLinearLayout*)layout{ [layout removeFromSuperview]; }
ios生成二维码,中间带圆角边框跟圆角logo图片
猜你喜欢
转载自iaiai.iteye.com/blog/2390362
今日推荐
周排行