美文网首页iOS自我学习库
iOS 生成生成带图片的二维码和不带图片的二维码

iOS 生成生成带图片的二维码和不带图片的二维码

作者: 哈哈哈哈嘻 | 来源:发表于2016-10-31 11:05 被阅读1035次

    前一段时间做了一个关于跑腿的App,有一个需求就是后台给每一个用户一个唯一的链接,这个链接邀请好友注册获得奖励。在App上以二维码的方式展示,现在给出我的二维码生成的方式和代码

    1.主要是中间带图片的二维码

    /**
     生成二维码
    
     @param url 二维码的URL
     @param View 添加到哪一个View上面
     */
    - (void)setErWeiMaWithUrl:(NSString *)url AndView:(UIView *)View{
        // 1、创建滤镜对象
        CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
        // 恢复滤镜的默认属性
        [filter setDefaults];
        // 2、设置数据
        NSString *string_data = url;
        // 将字符串转换成 NSdata (虽然二维码本质上是字符串, 但是这里需要转换, 不转换就崩溃)
        NSData *qrImageData = [string_data dataUsingEncoding:NSUTF8StringEncoding];
        
        // 设置过滤器的输入值, KVC赋值
        [filter setValue:qrImageData forKey:@"inputMessage"];
        
        // 3、获得滤镜输出的图像
        CIImage *outputImage = [filter outputImage];
        // 图片小于(27,27),我们需要放大
        outputImage = [outputImage imageByApplyingTransform:CGAffineTransformMakeScale(20, 20)];
        // 4、将CIImage类型转成UIImage类型
        UIImage *start_image = [UIImage imageWithCIImage:outputImage];
    
        // - - - - - - - - - - - - - - - - 添加中间小图标 - - - - - - - - - - - - - - - -
        // 5、开启绘图, 获取图形上下文 (上下文的大小, 就是二维码的大小)
        UIGraphicsBeginImageContext(start_image.size);
        // 把二维码图片画上去 (这里是以图形上下文, 左上角为(0,0)点
        [start_image drawInRect:CGRectMake(0, 0, start_image.size.width, start_image.size.height)];
        // 再把小图片画上去
        NSString *icon_imageName = @"icon_image";
        UIImage *icon_image = [UIImage imageNamed:icon_imageName];
        CGFloat icon_imageW = 200;
        CGFloat icon_imageH = icon_imageW;
        CGFloat icon_imageX = (start_image.size.width - icon_imageW) * 0.5;
        CGFloat icon_imageY = (start_image.size.height - icon_imageH) * 0.5;
        [icon_image drawInRect:CGRectMake(icon_imageX, icon_imageY, icon_imageW, icon_imageH)];
        // 6、获取当前画得的这张图片
        UIImage *final_image = UIGraphicsGetImageFromCurrentImageContext();
        // 7、关闭图形上下文
        UIGraphicsEndImageContext();
        // 8、借助UIImageView显示二维码
        UIImageView *imageView = [[UIImageView alloc] init];
        CGFloat imageViewW = 110;
        CGFloat imageViewH = imageViewW;
        CGFloat imageViewX = 0;
        CGFloat imageViewY = 0;
        imageView.frame =CGRectMake(imageViewX, imageViewY, imageViewW, imageViewH);
        [View addSubview:imageView];
        // 9、将最终合得的图片显示在UIImageView上
        imageView.image = final_image;
    }
    

    2.不带小图片的二维码

    // 生成二维码
    - (void)setupGenerateQRCode {
        
        // 1、创建滤镜对象
        CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
        
        // 恢复滤镜的默认属性
        [filter setDefaults];
        
        // 2、设置数据
        NSString *info = @"https://github.com/kingsic";
        // 将字符串转换成
        NSData *infoData = [info dataUsingEncoding:NSUTF8StringEncoding];
        
        // 通过KVC设置滤镜inputMessage数据
        [filter setValue:infoData forKeyPath:@"inputMessage"];
        
        // 3、获得滤镜输出的图像
        CIImage *outputImage = [filter outputImage];
        
        // 4、借助UIImageView显示二维码
        UIImageView *imageView = [[UIImageView alloc] init];
        CGFloat imageViewW = 150;
        CGFloat imageViewH = imageViewW;
        CGFloat imageViewX = (self.view.frame.size.width - imageViewW) / 2;
        CGFloat imageViewY = 80;
        imageView.frame =CGRectMake(imageViewX, imageViewY, imageViewW, imageViewH);
        [self.view addSubview:imageView];
        
        // 5、将CIImage转换成UIImage,并放大显示
        imageView.image = [outputImage SG_createNonInterpolatedWithSize:imageViewW];
    }
    

    demo还有设计扫描,有兴趣的可以看一下
    原文地址http://www.cocoachina.com/ios/20161009/17696.html
    GitHub下载地址: https://github.com/kingsic/SGQRCode.git

    相关文章

      网友评论

        本文标题:iOS 生成生成带图片的二维码和不带图片的二维码

        本文链接:https://www.haomeiwen.com/subject/ncxputtx.html