iOS生成二维码(中间包含图片),长按识别二维码(Swift)

本文介绍了如何在iOS中使用Swift生成包含图片的二维码,并实现长按手势识别二维码的功能。通过CIQRCodeGenerator滤镜创建二维码,结合CIFalseColor滤镜优化图像质量,最后在二维码中间添加图片。同时,文章还展示了如何添加长按手势,使用CIDetector识别二维码中的信息。
摘要由CSDN通过智能技术生成

在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: 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值