直接把代码一贴,生成二维码!非常简单,不需要解释,需要的可以直接拿去用。
NSString *jsonStr = [self convertToJsonData:@{@"s":self.ssid,@"p":self.pwd,@"u":user.user.uid,@"t":token}];
[self generateQRCodeWithStr:jsonStr];
- (void)generateQRCodeWithStr:(NSString *)mesStr{
//创建过滤器
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
//过滤器恢复默认
[filter setDefaults];
//给过滤器添加数据
NSString *string = mesStr;
//将NSString格式转化成NSData格式
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
[filter setValue:data forKeyPath:@"inputMessage"];
//获取二维码过滤器生成的二维码
CIImage *image = [filter outputImage];
//将获取到的二维码添加到imageview上
self.QRCodeImg.image =[self createNonInterpolatedUIImageFormCIImage:image withSize:550];
//----------------给 二维码 中间增加一个 自定义图片----------------
//开启绘图,获取图形上下文 (上下文的大小,就是二维码的大小)
UIGraphicsBeginImageContext(self.QRCodeImg.image.size);
//把二维码图片画上去. (这里是以,图形上下文,左上角为 (0,0)点)
UIGraphicsBeginImageContextWithOptions(self.QRCodeImg.image.size, NO, [[UIScreen mainScreen] scale]);
[self.QRCodeImg.image drawInRect:CGRectMake(0, 0, self.QRCodeImg.image.size.width, self.QRCodeImg.image.size.height)];
//再把小图片画上去
UIImage *sImage = [UIImage imageNamed:@"RQCodeLogo"];
CGFloat sImageW = 150;
CGFloat sImageH= 66;
CGFloat sImageX = (self.QRCodeImg.image.size.width - sImageW) * 0.5;
CGFloat sImgaeY = (self.QRCodeImg.image.size.height - sImageH) * 0.5;
[sImage drawInRect:CGRectMake(sImageX, sImgaeY, sImageW, sImageH)];
//获取当前画得的这张图片
UIImage *finalyImage = UIGraphicsGetImageFromCurrentImageContext();
//关闭图形上下文
UIGraphicsEndImageContext();
//设置图片
self.QRCodeImg.image = finalyImage;
}
- (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];
}
// 字典转json字符串方法
-(NSString *)convertToJsonData:(NSDictionary *)dict
{
NSError *error;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:&error];
NSString *jsonString;
if (!jsonData) {
KDSLog(@"%@",error);
}else{
jsonString = [[NSString alloc]initWithData:jsonData encoding:NSUTF8StringEncoding];
}
NSMutableString *mutStr = [NSMutableString stringWithString:jsonString];
NSRange range = {0,jsonString.length};
//去掉字符串中的空格
[mutStr replaceOccurrencesOfString:@" " withString:@"" options:NSLiteralSearch range:range];
NSRange range2 = {0,mutStr.length};
//去掉字符串中的换行符
[mutStr replaceOccurrencesOfString:@"\n" withString:@"" options:NSLiteralSearch range:range2];
return mutStr;
}