swift生成二维码
一.简介
- 二维条码/二维码是用某种特定的几何图形按一定规律在平面分布的黑白相间的图形记录数据符号信息的
- 在编码上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来表示文字数值信息
- 通过图象输入设备或光电扫描设备自动识读以实现信息自动处理
二.特点
- 每种码制有其特定的字符集
- 每个字符占有一定的宽度
- 具有一定的校验功能
三.功能
- 信息获取(名片、地图、WIFI密码、资料)
- 网站跳转(跳转到微博、手机网站、网站)
- 广告推送(用户扫码,直接浏览商家推送的视频、音频广告)
- 手机电商(用户扫码、手机直接购物下单)
- 防伪溯源(用户扫码、即可查看生产地;同时后台可以获取最终消费地)
- 优惠促销(用户扫码,下载电子优惠券,抽奖)
- 会员管理(用户手机上获取电子会员信息、VIP服务)
- 手机支付(扫描商品二维码,通过银行或第三方支付提供的手机端通道完成支付
四.优点
- 高密度编码,信息容量大:可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍
- 编码范围广:该条码可以把图片、声音、文字、签字、指纹等可以数字化的信息进行编码,用条码表示出来;可以表示多种语言文字;可表示图像数据
- 容错能力强,具有纠错功能:这使得二维条码因穿孔、污损等引起局部损坏时,照样可以正确得到识读,损毁面积达50%仍可恢复信息 4.译码可靠性高:它比普通条码译码错误率百万分之二要低得多,误码率不超过千万分之一 5.可引入加密措施:保密性、防伪性好 6.成本低,易制作,持久耐用 7.条码符号形状、尺寸大小比例可变 8.二维条码可以使用激光或CCD阅读器识读
五.代码实现
1 import UIKit 2 3 class QRCodeCreateViewController: UIViewController { 4 5 @IBOutlet weak var iconImage: UIImageView! 6 7 override func viewDidLoad() { 8 super.viewDidLoad() 9 10 createQRCode() 11 } 12 13 private func createQRCode() { 14 15 // 建立一个滤镜 16 let qrFilter = CIFilter(name: "CIQRCodeGenerator") 17 // 重设滤镜的初始值 18 qrFilter.setDefaults() 19 20 // 通过 KVC 设置滤镜的内容 21 qrFilter.setValue("我的第一个二维码".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true), forKey: "inputMessage") 22 23 // 输出图像 24 let ciImage = qrFilter.outputImage 25 // 打印生成图片的大小,生成的图像 23 * 23 26 println(ciImage.extent()) 27 28 // 过滤图像单色彩以及`形变`的滤镜 29 let colorFilter = CIFilter(name: "CIFalseColor") 30 colorFilter.setDefaults() 31 32 colorFilter.setValue(ciImage, forKey: "inputImage") 33 34 // 不能直接用 UIColor 转换,会崩溃 35 // colorFilter.setValue(UIColor.redColor().CIColor, forKey: "inputColor0") 36 // 前景色 37 colorFilter.setValue(CIColor(red: 0, green: 0, blue: 0), forKey: "inputColor0") 38 // 背景色 39 colorFilter.setValue(CIColor(red: 1, green: 1, blue: 1), forKey: "inputColor1") 40 41 let transform = CGAffineTransformMakeScale(5, 5) 42 let transformImage = colorFilter.outputImage.imageByApplyingTransform(transform) 43 44 let codeImage = UIImage(CIImage: transformImage) 45 let avatarImage = UIImage(named: "avatar") 46 47 iconImage.image = insertAvatarImage(codeImage!, avatarImage: avatarImage!) 48 } 49 50 // 合成头像图像 51 private func insertAvatarImage(codeImage: UIImage, avatarImage: UIImage) -> UIImage { 52 53 let size = codeImage.size 54 55 // 1. 开启图像的上下文 56 UIGraphicsBeginImageContext(size) 57 58 // 2. 绘制二维码图像 59 codeImage.drawInRect(CGRectMake(0, 0, size.width, size.height)) 60 61 // 3. 计算头像的大小 62 let w = size.width * 0.25 63 let h = size.height * 0.25 64 let x = (size.width - w) * 0.5 65 let y = (size.height - h) * 0.5 66 67 avatarImage.drawInRect(CGRectMake(x, y, w, h)) 68 69 // 4. 从上下文中取出图像 70 let image = UIGraphicsGetImageFromCurrentImageContext() 71 72 // 5. 关闭上下文 73 UIGraphicsEndImageContext() 74 75 return image 76 }
运行结果: