//MARK:生成一个二维码图片
- (CIImage *)getQRCode:(NSString *)constent{
//创建二维码滤镜
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
[filter setDefaults];
NSData *strData = [constent dataUsingEncoding:NSUTF8StringEncoding];
[filter setValue:strData forKeyPath:@"inputMessage"];
[filter setValue:@"M" forKeyPath:@"inputCorrectionLevel"];
//生成二维码
CIImage *outputImage = [filter outputImage];
return outputImage;
}
//MARK:重新生成固定大小的二维码图片
+ (UIImage *)resizeQRCodeImage:(CIImage *)image withSize:(CGFloat)size{
CGRect extent = CGRectIntegral(image.extent);
CGFloat scale = MIN(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent));
size_t width = CGRectGetWidth(extent) * scale;
size_t height = CGRectGetHeight(extent) * scale;
CGColorSpaceRef colorSpaceRef = CGColorSpaceCreateDeviceGray();
CGContextRef contextRef = CGBitmapContextCreate(nil, width, height, 8, 0, colorSpaceRef, (CGBitmapInfo)kCGImageAlphaNone);
CIContext *context = [CIContext contextWithOptions:nil];
CGImageRef imageRef = [context createCGImage:image fromRect:extent];
CGContextSetInterpolationQuality(contextRef, kCGInterpolationNone);
CGContextScaleCTM(contextRef, scale, scale);
CGContextDrawImage(contextRef, extent, imageRef);
CGImageRef imageRefResized = CGBitmapContextCreateImage(contextRef);
//Release
CGContextRelease(contextRef);
CGImageRelease(imageRef);
CGColorSpaceRelease(colorSpaceRef);
UIImage *theImage = [UIImage imageWithCGImage:imageRefResized];
CFRelease(imageRefResized);
return theImage;
}
输出图像的标准:ISO/IEC 18004:2006标准
inputMessage:二维码的内容
inputCorrectionLevel:二维码的容错率 一共可以分为4个级别,默认是 M;
L
:7%
M
:15%
Q
:25%
H
:30%
容错率表示,二维码最多被遮挡多少面积依旧能被识别。 所以我们可以自己制作带图标的二维码,生成普通的二维码直接在任意位置贴上想要的图标即可,只要图标面积不超过容错率上限都可以被识别。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)