swift-生成二维码(可带图片)

来源:互联网 发布:李嘉诚跑路 知乎 编辑:程序博客网 时间:2024/05/01 12:51

import UIKit


class ViewController: UIViewController {


    overridefunc viewDidLoad() {

        super.viewDidLoad()

        // Do any additional setup after loading the view, typically from a nib.

        // 不带图片的二维码图片

        let imageViewIcon1 =UIImageView(frame: CGRect(x:20, y: 20, width:150, height: 150))

        imageViewIcon1.image =createQRForString("MR.G", qrImageName:"")

        self.view.addSubview(imageViewIcon1)

        

        // 带图片的二维码图片

        let imageViewIcon2 =UIImageView(frame: CGRect(x:200, y: 20, width:150, height: 150))

        imageViewIcon2.image =createQRForString("MR.G", qrImageName:"2")

        self.view.addSubview(imageViewIcon2)

        

    }


    overridefunc didReceiveMemoryWarning() {

        super.didReceiveMemoryWarning()

        // Dispose of any resources that can be recreated.

    }

    

    func createQRForString(qrString:String?, qrImageName: String?) ->UIImage? {

        iflet sureQRString = qrString {

            let stringData = sureQRString.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)

            // 创建一个二维码的滤镜

            let qrFilter =CIFilter(name: "CIQRCodeGenerator")

            qrFilter?.setValue(stringData, forKey:"inputMessage")

            qrFilter?.setValue("H", forKey:"inputCorrectionLevel")

            let qrCIImage = qrFilter?.outputImage

            // 创建一个颜色滤镜,黑白色

            let colorFilter =CIFilter(name: "CIFalseColor")

            colorFilter?.setDefaults()

            colorFilter?.setValue(qrCIImage, forKey:"inputImage")

            // 二维码颜色

            colorFilter?.setValue(CIColor(red:1, green: 1, blue:1), forKey: "inputColor0")

            // 二维码背景色

            colorFilter?.setValue(CIColor(red:0, green: 0, blue:0), forKey: "inputColor1")

            // 返回二维码image

            let codeImage =UIImage(CIImage: colorFilter!.outputImage!.imageByApplyingTransform(CGAffineTransformMakeScale(5,5)))

            // 通常,二维码都是定制的,中间的都会放想要表达意思的图片

            iflet iconImage = UIImage(named: qrImageName!) {

                let rect =CGRect(x: 0, y:0, width: codeImage.size.width, height: codeImage.size.height)

                UIGraphicsBeginImageContext(rect.size)

                

                codeImage.drawInRect(rect)

                let avatarSize =CGSize(width: rect.size.width *0.25, height: rect.size.height

                    * 0.25)

                let x = (rect.size.width - avatarSize.width) * 0.5

                let y = (rect.size.height - avatarSize.height) * 0.5

                iconImage.drawInRect(CGRect(x: x, y: y, width: avatarSize.width, height: avatarSize.height))

                

                let resultImage =UIGraphicsGetImageFromCurrentImageContext()

                

                UIGraphicsEndImageContext()

                return resultImage

            }

            return codeImage

        }

        returnnil

    }

}

0 0