加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

二维码---生成 swift

发布时间:2020-12-14 06:35:53 所属栏目:百科 来源:网络整理
导读:swift 3.0 Xcode 8.1 import UIKitclass ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() let label = UILabel.init(frame: CGRect.init(x: 50,y: 100,width: 200,height: 21)) label.text = "my name is Apple" sel

swift 3.0 Xcode 8.1

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let label = UILabel.init(frame: CGRect.init(x: 50,y: 100,width: 200,height: 21))
        label.text = "my name is Apple"
        self.view.addSubview(label)
        
        let imageView = UIImageView.init(frame: CGRect.init(x: 50,y: 200,width: 300,height: 300))
        imageView.backgroundColor = UIColor.gray
        self.view.addSubview(imageView)
        
        //添加二维码图片
        imageView.image = self.creatQRCodeImage(text: label.text!)
    }

    //MARK: -传进去字符串,生成二维码图片
    func creatQRCodeImage(text: String) -> UIImage{
        
        //创建滤镜
        let filter = CIFilter(name: "CIQRCodeGenerator")
        //还原滤镜的默认属性
        filter?.setDefaults()
        //设置需要生成二维码的数据
        filter?.setValue(text.data(using: String.Encoding.utf8),forKey: "inputMessage")
        //从滤镜中取出生成的图片
        let ciImage = filter?.outputImage
        //把CIImage转成UIImage
        //let bgImage = UIImage.init(ciImage: ciImage!) //这个清晰度不好
        let bgImage = createNonInterpolatedUIImageFormCIImage(image: ciImage!,size: 300) //这个清晰度好
        //创建一个头像
        let icon = UIImage(named: "123.jpg")
        //合成图片(把二维码和头像合并)
        let newImage = creatImage(bgImage: bgImage,iconImage: icon!)
        //返回生成好的二维码
        return newImage
    }
    
    //MARK: - 根据CIImage生成指定大小的高清UIImage
    func createNonInterpolatedUIImageFormCIImage(image: CIImage,size: CGFloat) -> UIImage {
        
        //CIImage没有frame与bounds属性,只有extent属性
        let ciextent: CGRect = image.extent.integral
        let scale: CGFloat = min(size/ciextent.width,size/ciextent.height)
        
        let context = CIContext(options: nil)  //创建基于GPU的CIContext对象,性能和效果更好
        let bitmapImage: CGImage = context.createCGImage(image,from: ciextent)! //CIImage->CGImage
        
        let width = ciextent.width * scale
        let height = ciextent.height * scale
        let cs: CGColorSpace = CGColorSpaceCreateDeviceGray() //灰度颜色通道
        let info_UInt32 = CGImageAlphaInfo.none.rawValue
        
        let bitmapRef = CGContext(data: nil,width: Int(width),height: Int(height),bitsPerComponent: 8,bytesPerRow: 0,space: cs,bitmapInfo: info_UInt32)! //图形上下文,画布
        bitmapRef.interpolationQuality = CGInterpolationQuality.none //写入质量
        bitmapRef.scaleBy(x: scale,y: scale) //调整“画布”的缩放
        bitmapRef.draw(bitmapImage,in: ciextent)  //绘制图片
        
        let scaledImage: CGImage = bitmapRef.makeImage()! //保存
        return UIImage(cgImage: scaledImage)
    }
    
    //MARK: - 根据背景图片和头像合成头像二维码
    func creatImage(bgImage: UIImage,iconImage:UIImage) -> UIImage{
        
        //开启图片上下文
        UIGraphicsBeginImageContext(bgImage.size)
        //绘制背景图片
        bgImage.draw(in: CGRect(origin: CGPoint.zero,size: bgImage.size))
        //绘制头像
        let width: CGFloat = 50
        let height: CGFloat = width
        let x = (bgImage.size.width - width) * 0.5
        let y = (bgImage.size.height - height) * 0.5
        iconImage.draw(in: CGRect(x: x,y: y,width: width,height: height))
        //取出绘制好的图片
        let newImage = UIGraphicsGetImageFromCurrentImageContext()
        //关闭上下文
        UIGraphicsEndImageContext()
        //返回合成好的图片
        return newImage!
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读