iOS生成二维码
iOS可以使用CIFilter类来生成二维码,下面具体用代码的方式来演示用iOS的原生API生成二维码。
- (CIImage *)createQRForString:(NSString *)qrString
{
//将文字转化为UTF-8格式的NSData对象
NSData *stringData = [qrString dataUsingEncoding:NSUTF8StringEncoding];
// 创建二维码滤镜
CIFilter *qrFilter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
[qrFilter setValue:stringData forKey:@"inputMessage"];
//设置纠错率
[qrFilter setValue:@"H" forKey:@"inputCorrectionLevel"];
//返回 CIImage
return qrFilter.outputImage;
}
- (UIImage *)createNonInterpolatedUIImageFromCIImage:(CIImage *)image withScale:(CGFloat)scale
{
// 将CIImage放入CGImageRef
CGImageRef cgImage = [[CIContext contextWithOptions:nil] createCGImage:image fromRect:image.extent];
//缩放
UIGraphicsBeginImageContext(CGSizeMake(image.extent.size.width * scale, image.extent.size.width * scale));
//获取上下文
CGContextRef context = UIGraphicsGetCurrentContext();
//将图片保存为最高质量
CGContextSetInterpolationQuality(context, kCGInterpolationNone);
CGContextDrawImage(context, CGContextGetClipBoundingBox(context), cgImage);
// 获取缩放后的二维码
UIImage *scaledImage = UIGraphicsGetImageFromCurrentImageContext();
// 关闭上下文
UIGraphicsEndImageContext();
CGImageRelease(cgImage);
// Need to set the image orientation correctly
UIImage *flippedImage = [UIImage imageWithCGImage:[scaledImage CGImage]
scale:scaledImage.scale
orientation:UIImageOrientationDownMirrored];
return flippedImage;
}
使用的话,非常方便,如下代码
// 生成二维码
CIImage *qrCode = [self createQRForString:@"http://www.csdn.net"];
// 将生成的二维码转换为UIImage
UIImage *qrCodeImg = [self createNonInterpolatedUIImageFromCIImage:qrCode withScale:2*[[UIScreen mainScreen] scale]];