在iOS中有个类CIFilter,通过这个类可以创建各种特定的过滤器,今天我们主要介绍一种二维码发生器(CIQRCodeGenerator)滤镜,通过这个滤镜可以自动生成我们需要的二维码。
首先我们要创建一个二维码滤镜:
//创建二维码滤镜
let qrCIFilter = CIFilter(name: "CIQRCodeGenerator")
注意,这个初始化方法中的传入参数是只有固定的几种字符串的,使用不同的字符串可以创建不同用处的滤镜的。所以在官方的参考文档中特别说明在创建以后要检查qrCIFilter是否为空,以防拼写错误无法创建滤镜。如果我们想知道到底有哪几种固定的字符串可以在Xcode中command+右键点击CIQRCodeGenerator字符串,跳到的参考文献上下文中有其他固定值的介绍的。
滤镜创建出来了,我们还要给这滤镜添加各种属性,滤镜的属性是一对一对的键值对的,同样的这个属性字典的key值也是固定的,二维码滤镜有两种属性inputMessage和inputCorrectionLevel,在iOS中,滤镜的属性如果你不特别设置那么系统会给一个默认值,所以你无需再统一设置默认值。inputMessage指输入信息,具体来说就是你要加密的的字符串,但是value值是NSData类型的,inputCorrectionLevel指输入的纠错级别,有四种不同的级别:A single letter specifying the error correction format. An NSString object whose display name is CorrectionLevel不多说了,看代码:
//二维码包含的信息
qrCIFilter!.setValue(messageData, forKey: "inputMessage")
//L7% M15% Q25% H%30% 纠错级别. 默认值是M
qrCIFilter!.setValue("H", forKey: "inputCorrectionLevel")
到这一步其实你已经创建了一个最简单的二维码了,你可以输出过滤后的图片了:
let qrImage = qrCIFilter?.outputImage
这里qrImage是CIImage类型的,你可以通过这个qrImage创建一个UIImage类型的图片,然后放到UIImageView视图显示出来,但是你会发现这个二维码会非常模糊,我们要对它进一步处理。
在这里先感谢一下航哥的无私奉献,下面的处理我也是看到他的分享后才知道可以这么做的。我们在上面的基础上再创建一个滤镜CIFalseColor,我查了下官方文档度这种滤镜的说明简单:False color is often used to process astronomical and other scientific data, such as ultraviolet and x-ray images,其实它的用处是用来伪造颜色的。CIFalseColor只有三个固定的属性inputImage,inputColor0,inputColor1。这三属性很好理解,直接看代码:
let colorFilter = CIFilter(name: "CIFalseColor")
//输入图片
colorFilter!.setValue(qrImage, forKey: "inputImage")
//输入颜色
colorFilter!.setValue(CIColor(red: 0,green: 0,blue: 0), forKey: