ios生成二维码,中间带圆角边框跟圆角logo图片


//生成二维码
-(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];
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值