swift 绘制二维码

导语

网上二维码生成的demo有很多了,自己用swift写了一个,不多说,直接贴效果图,上代码

QQ20170609-105035.gif

生成二维码

    fileprivate func creatCIImage(string: String) -> CIImage? {
        //creat 二维码滤镜
        let filter = CIFilter(name: "CIQRCodeGenerator")
        //恢复默认属性
        filter?.setDefaults()
        let data = string.data(using: .utf8)
        filter?.setValue(data, forKey: "inputMessage")
        //生成二维码
        let ciImage = filter?.outputImage
        return ciImage
    }

重新绘制改变大小

fileprivate func transitionCIImageToUIImage(ciImage: CIImage, size: CGSize) -> UIImage? {
        //获取ciimage的bounds
        let extent = ciImage.extent
        //获取缩放比例
        let scale = min(size.width / extent.width, size.height / extent.height) * UIScreen.main.scale
        //创建bitmap(位图)
        let context = CIContext(options: nil)
        guard let bitImage = context.createCGImage(ciImage, from: extent) else { return nil }
        
        let width = extent.width * scale
        let height = extent.height * scale
        //创建灰度空间
        let cs = CGColorSpaceCreateDeviceGray()
        //创建位图上下文
        let bitRef = CGContext.init(data: nil, width:Int(width), height: Int(height), bitsPerComponent: 8, bytesPerRow: 0, space: cs, bitmapInfo: CGImageAlphaInfo.none.rawValue)
        bitRef?.interpolationQuality = .none
        bitRef?.scaleBy(x: scale, y: scale)
        bitRef?.draw(bitImage, in: extent)
        //绘制
        guard let scaleImage = bitRef?.makeImage() else { return nil }
        
        let image = UIImage.init(cgImage: scaleImage)
        
        return image
    }

合成中间logo

fileprivate func syntheticTwoImages(qRImage: UIImage, headerImage: UIImage) -> UIImage? {
        UIGraphicsBeginImageContextWithOptions(qRImage.size, false, 0)
        
        let qrSizeWidth = qRImage.size.width / qRImage.scale
        let qrSizeHeight = qRImage.size.height / qRImage.scale
        let headerFrame = CGRect(x: qrSizeWidth / 3, y: qrSizeHeight / 3, width: qrSizeWidth / 3, height: qrSizeHeight / 3)
        
        qRImage.draw(in: CGRect(x: 0, y: 0, width: qrSizeWidth, height: qrSizeHeight))
        headerImage.draw(in: headerFrame)
        
        let syntheticImage = UIGraphicsGetImageFromCurrentImageContext()
        UIGraphicsEndImageContext()
        
        return syntheticImage
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 15,684评论 4 61
  • 只能永远把艰辛的劳动看作是生命的必要;即使没有收获的指望,也心平气静地继续耕种。 ——路遥 最喜欢小说结尾后路遥的...
    communovere阅读 628评论 5 1
  • 5个需求: 1.实体书占据大量空间,电子书编辑不方便。(弱需求)——》我想提升学习效率。 2.背包空间有限,需要整...
    851b667e724d阅读 213评论 0 0
  • 我一直以自己要求不高,挣的钱够花就好,做自己喜欢的事情一直是我最主要的追求。但今天和H老师他们团队一起吃饭,我突然...
    奔跑的马齿苋阅读 500评论 0 0
  • 今天上午第一部微电影开拍。 通过此次拍摄,我发现自己在引导演员表演,和统筹整个剧组,分配任务等方面还有待提高!下部...
    九霄翔鹰阅读 107评论 0 0

友情链接更多精彩内容