iOSiOS开发首页投稿(暂停使用,暂停投稿)

iOS-二维码的生成

2016-11-05  本文已影响229人  指头飞血

上周公司做的无人售货机项目 要app下单 通过生成的二维码来扫描取货,用到了二维码的生成小技术,来和大家分享一下!!!

iOS7之后苹果集成了二维码的生成和读取功能,之前使用的神马zbarsdk目前不支持64位处理器,现在我们只需轻轻的导入CoreImage框架(Xcode6.4居然不用导入)就能把功能实现!废话不多说,开始搬砖...

1.首先导入CoreImage框架

ws.png

2.代码的实现

*先懒加载一个相框
@property(nonatomic,strong)UIImageView *qrCodeImage;
//懒加载qrCodeImage
-(UIImageView *)qrCodeImage{
    if (!_qrCodeImage) {
       self.qrCodeImage = [[UIImageView alloc]initWithFrame:CGRectMake((self.view.frame.size.width - 100)/2, 150, 100, 100)];
    }
     return _qrCodeImage;
*通过滤镜CIFilter生成二维码
- (void)viewDidLoad {
    [super viewDidLoad];
    [self setTitle:@"生成二维码"];
    [self.view addSubview:self.qrCodeImage];
    [self.view setBackgroundColor:[UIColor whiteColor]];
 // 1.创建滤镜
    CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    // 2.还原滤镜默认属性
    [filter setDefaults];
 // 3.设置需要生成二维码的数据到滤镜中(OC中要求设置的是一个二进制数据)
    NSData *data = [@"http://www.baidu.com" dataUsingEncoding:NSUTF8StringEncoding];//(这里的字符串就是用来生成二维码的,可直接复制代码只需修改这里如果没有其他需求)
    [filter setValue:data forKeyPath:@"InputMessage"];
    // 4.从滤镜从取出生成好的二维码图片
    CIImage *ciImage = [filter outputImage];
self.qrCodeImage.image = [self createNonInterpolatedUIImageFormCIImage:ciImage size: 500];
}
*生成高清的二维码(不然弄死手机也扫描不出来...可能我手机太烂)
- (UIImage *)createhdUIImageFormCIImage:(CIImage *)ciImage size:(CGFloat)size
{
    CGRect wsRect = CGRectIntegral(ciImage.extent);
    CGFloat scale = MIN(size / CGRectGetWidth(wsRect), size / CGRectGetHeight(wsRect));
  //  1.二维码基本设置
    // 1.创建bitmap;
    size_t width = CGRectGetWidth(wsRect) * scale;
    size_t height = CGRectGetHeight(wsRect) * scale;
    CGColorSpaceRef cs = CGColorSpaceCreateDeviceGray();
    CGContextRef wsRef = CGBitmapContextCreate(nil, width, height, 8, 0, cs, (CGBitmapInfo)kCGImageAlphaNone);
    CIContext *context = [CIContext contextWithOptions:nil];
    CGImageRef wsImageRef = [context createCGImage:ciImage fromRect:wsRect];
    CGContextSetInterpolationQuality(wsRef, kCGInterpolationNone);
    CGContextScaleCTM(wsRef, scale, scale);
    CGContextDrawImage(wsRef, wsRect, wsImageRef);
    // 保存bitmap到图片
    CGImageRef scaledImage = CGBitmapContextCreateImage(wsRef);
    CGContextRelease(wsRef);
    CGImageRelease(wsImageRef);
    return [UIImage imageWithCGImage:scaledImage]; // 黑白图片(到这里已经结束了)
//    UIImage *newImage = [UIImage imageWithCGImage:scaledImage];
//     return [self imageBlackToTransparent:newImage withRed:1.0f andGreen:0.0f andBlue:0.0f];// 自定义颜色
}
*黑白的效果图出来了...
qrCode.png

完事!!!

上一篇下一篇

猜你喜欢

热点阅读