//生成二维码
-(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图片
原创
©著作权归作者所有:来自51CTO博客作者mb63e0703549da8的原创作品,请联系作者获取转载授权,否则将追究法律责任
上一篇:iOS内存警告问题解决
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
用空闲时间做了一个小程序-二维码生成器二维码 十进制 UI
-
Android中生成带logo的二维码
目前在我国内,炒的最火热的就是二维码与O2O(Online To Offline)模式的结合,即利用二维码的读取将
android 二维码 zxing jar包 生成二维码