
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" 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. }} 总结 以上是内存溢出为你收集整理的二维码---生成 swift全部内容,希望文章能够帮你解决二维码---生成 swift所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)