美文网首页
使用Swift 生成二维码

使用Swift 生成二维码

作者: J_Pisces | 来源:发表于2016-08-19 01:25 被阅读798次

    使用Swift实现创建二维码


           不久前刚刚接触学习Switf , 学习一门语言还是要多练习为主 , 所以就想使用Swift来写点东西来边敲边学习.
           这次是使用Swift来实现创建二维码的小功能 欢迎指教

    • 首先搭建界面 , 使用TextField来输入二维码信息 , 使用UIImageView来显示生成的二维码 , 当然还有生成按钮和保存按钮
    屏幕快照 2016-08-19 上午1.15.54.png
    • 导入框架 : import CoreImage
    • 监听生成按钮点击
    • 在监听方法中 (直接代码吧)
         @IBAction func touchCreateQR(sender: UIButton) {
        //获取输入内容
        guard let inputMsg = textFiled.text else {
            return
        } 
        //将信息生成二维码
        //1.创建滤镜
        let fileter = CIFilter(name: "CIQRCodeGenerator")
        
        //2.给滤镜设置内容
        guard let inputData = inputMsg.dataUsingEncoding(NSUTF8StringEncoding) else {
            return
        }
        
        fileter?.setValue(inputData, forKeyPath: "inputMessage")
        
        //获取生成的二维码
        guard let outPutImage = fileter?.outputImage else {
            return
        }
        
        //显示二维码,因为outPutImage为CIImage类型,所以要转成UIImage
        imageView.image =  UIImage(CIImage:outPutImage)
      
        }    
      
    • 这样就能在TextField中输入信息后生成一张二维码图片 , 但是这样生成的二维码显示得并不清晰 , 所以我们要写个方法展示清晰的二维码图片 </br>
        //定义方法和要传入的参数,返回值为UIImage
        
        private func createHDQRImage(originalImage : CIImage) -> UIImage {
        
        //创建Transform
        let scale = imageView.bounds.width / originalImage.extent.width
        
        let transform = CGAffineTransformMakeScale(scale, scale)
        
        //放大图片
        let hdImage = originalImage.imageByApplyingTransform(transform)
      
        return UIImage(CIImage: hdImage)
        
        } 
      
    • 然后在显示二维码的代码就可以直接把不清晰的二维码图片传进方法调用 </br>

      imageView.image = createHDQRImage(outPutImage)

    一般的在二维码中心位置还应该会有一张前景图 , 这个效果也直接上代码吧
        //也是写一个方法,传入二维码和前景图,返回值为UIImage
        
        private func createFgImage(qrCodeImage : UIImage , fgImage : UIImage ) -> UIImage {
        
        //开启上下文
        UIGraphicsBeginImageContext(qrCodeImage.size)
        
        //把二维码画到上下文
        qrCodeImage.drawInRect(CGRect(origin: CGPointZero, size: qrCodeImage.size))
        
        //把前景图画到二维码上
        let w : CGFloat = 50
        let h : CGFloat = 50
        let x : CGFloat = (qrCodeImage.size.width - w) * 0.5
        let y : CGFloat = (qrCodeImage.size.height - h) * 0.5
        fgImage.drawInRect(CGRectMake(x, y, w, h))
        
        //获取新图片
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        
        //关闭上下文
        UIGraphicsEndImageContext()
        
        return newImage
        
    } 
    
    • 然后在监听生成按钮的方法中显示二维码部分就可以改成

        //显示二维码
        let qrImage = createHDQRImage(outputImage)
        
        //前景图
        let fgImage = UIImage(named: "IMG_1408")
       
        imageView.image = createFgImage(qrImage, fgImage: fgImage!) 
        
        }
      

    保存二维码

    保存二维码到相册就很容易做了只要在监听保存按钮的方法中使用
    UIImageWriteToSavedPhotosAlbum(imageView.image!, nil, nil, nil)
    </br>
           其实还有很多细节我都还没有完善,初学Swift很多东西还没从OC转过来T_T , 就先看着吧,等完善后再更新了.

    相关文章

      网友评论

          本文标题:使用Swift 生成二维码

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