热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

使用Swift语言生成二维码

二维条码二维码是用某种特定的几何图形按一定规律在平面分布的黑白相间的图形记录数据符号信息的在编码上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相
  • 二维条码/二维码是用某种特定的几何图形按一定规律在平面分布的黑白相间的图形记录数据符号信息的
  • 在编码上巧妙地利用构成计算机内部逻辑基础的“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     }

 运行结果:

swift生成二维码


推荐阅读
  • 本文将详细介绍如何封装一个多功能的PickerView组件,包括文本选择、日期选择和地理位置选择等功能,旨在提供一个更加灵活和易于使用的PickerView解决方案。 ... [详细]
  • 采用IKE方式建立IPsec安全隧道
    一、【组网和实验环境】按如上的接口ip先作配置,再作ipsec的相关配置,配置文本见文章最后本文实验采用的交换机是H3C模拟器,下载地址如 ... [详细]
  • 请看|差别_Android 6.0 运行时权限处理解析
    请看|差别_Android 6.0 运行时权限处理解析 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 本文探讨了如何在 PHP 的 Eloquent ORM 中实现数据表之间的关联查询,并通过具体示例详细解释了如何将关联数据嵌入到查询结果中。这不仅提高了数据查询的效率,还简化了代码逻辑。 ... [详细]
  • 本文详细介绍了Java中的输入输出(IO)流,包括其基本概念、分类及应用。IO流是用于在程序和外部资源之间传输数据的一套API。根据数据流动的方向,可以分为输入流(从外部流向程序)和输出流(从程序流向外部)。此外,还涵盖了字节流和字符流的区别及其具体实现。 ... [详细]
  • 本文将详细介绍如何在没有显示器的情况下,使用Raspberry Pi Imager为树莓派4B安装操作系统,并进行基本配置,包括设置SSH、WiFi连接以及更新软件源。 ... [详细]
  • iOS 开发技巧:TabBarController 自定义与本地通知设置
    本文介绍了如何在 iOS 中自定义 TabBarController 的背景颜色和选中项的颜色,以及如何使用本地通知设置应用程序图标上的提醒个数。通过这些技巧,可以提升应用的用户体验。 ... [详细]
  • 盈透证券提现指南
    本文详细介绍了如何通过盈透证券平台安全有效地进行资金提现,包括推荐使用的浏览器、登录流程、资金转账的具体步骤以及注意事项。 ... [详细]
  • 本文介绍了如何在Swift 3.0中实现对设备识别码(DeviceNo)和用户账号ID(AccountId)的获取及存储。通过使用系统提供的UserDefaults服务,我们能够有效地管理这些关键数据,确保应用在不同场景下的稳定性和用户体验。 ... [详细]
  • 本文探讨了如何在字符串中无条件地将一个值替换为另一个值,即使原值不断变化。例如,无论原始值是2、4还是5,都能将其成功替换。 ... [详细]
  • 在现代移动应用开发中,尤其是iOS应用,处理来自服务器的JSON数据是一项基本技能。无论是使用Swift还是PHP,有效地解析和利用JSON数据对于提升用户体验至关重要。本文将探讨如何在Swift中优雅地处理JSON,以及PHP中处理JSON的一些技巧。 ... [详细]
author-avatar
mobiledu2502890207
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有