二维码---生成 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.1import 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. } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读