ios7之后系统框架已经集成二维码的生成与读取, 这使开发变得方便很多, 并且会比第三方更加效率。
系统二维码主要通过CIFilter的对象来完成
首先我们需要先导入这个类所在的框架:
#import <CoreImage/CoreImage.h>
生成二维码
// 生成二维码
-(UIImage *)creat2DcodeImage:(NSString *)url{
// 1. 创建一个二维码滤镜实例(CIFilter)
CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
[filter setDefaults]; // 滤镜恢复默认设置
// 2. 给滤镜添加数据
NSString *string = url; //根据网址生成
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
// 使用KVC的方式给filter赋值
[filter setValue:data forKeyPath:@"inputMessage"];
// 3. 生成二维码
CIImage *image = [filter outputImage];
// 4. 高清处理
UIImage *newimg = [self createNonInterpolatedUIImageFormCIImage:image withSize:130.0];
// 5. 添加logo
// 开启绘图, 获取图片 上下文<图片大小>
UIGraphicsBeginImageContext(newimg.size);
// 将二维码图片画上去
[newimg drawInRect:CGRectMake(0, 0, newimg.size.width, newimg.size.height)];
// 将小图片画上去
UIImage *smallImage = [UIImage imageNamed:@"动画1"];
[smallImage drawInRect:CGRectMake((newimg.size.width - 50) / 2, (newimg.size.width - 50) / 2, 50, 50)];
// 获取最终的图片
UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();
// 关闭上下文
UIGraphicsEndImageContext();
return finalImage;
}
// 注意:logo图片不能太大, 否则会导致扫描不到二维码中的信息。
生成URL的二维码
如果我们想要生成URL的二维码, 只需要把上面第2步中的string替换为一个URL字符串即可。
二维码高清处理
调用以下方法即可,其中的参数size最好近似等于二维码的边长。
- (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];
}
http://www.jianshu.com/p/e8f7a257b612
http://www.cnblogs.com/QianChia/p/6213466.html *封装扫描,识别,生成
好用的第三方zxing