swift 快速绘制二维码_swift 二维码 - CSDN
  • 二维码的生成 Swift版本 (程序员直接上代码) override func touchesBegan(touches: Set, withEvent event: UIEvent?) { view.endEditing(true) let str = inputTV.text ?? "" // 1. 创建二维码滤镜 let filter =...

    二维码的生成 Swift版本 (程序员直接上代码)

       override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    
        view.endEditing(true)
    
    
        let str = inputTV.text ?? ""
    
        // 1. 创建二维码滤镜
        let filter = CIFilter(name: "CIQRCodeGenerator")
    
        // 1.1 恢复滤镜默认设置
        filter?.setDefaults()
    
        // 2. 设置滤镜输入数据
        // KVC
        let data = str.dataUsingEncoding(NSUTF8StringEncoding)
        filter?.setValue(data, forKey: "inputMessage")
    
        // 2.2 设置二维码的纠错率
        filter?.setValue("M", forKey: "inputCorrectionLevel")
    
    
        // 3. 从二维码滤镜里面, 获取结果图片
        var image = filter?.outputImage
    
    
        // 借助这个方法, 处理成为一个高清图片
        let transform = CGAffineTransformMakeScale(20, 20)
        image = image?.imageByApplyingTransform(transform)
    
        // 3.1 图片处理
        // (23.0, 23.0)
        var resultImage = UIImage(CIImage: image!)
        print(resultImage.size)
    
        // 前景图片
        let center = UIImage(named: "erha.png")
        resultImage = getNewImage(resultImage, center: center!)
    
    
        // 4. 显示图片
        qrCodeImageView.image = resultImage
    
    
    }
    
    
     // 保证图片放大清晰的方法 
    func getNewImage(sourceImage: UIImage, center: UIImage) -> UIImage {
    
        let size = sourceImage.size
        // 1. 开启图形上下文
        UIGraphicsBeginImageContext(size)
    
        // 2. 绘制大图片
        sourceImage.drawInRect(CGRectMake(0, 0, size.width, size.height))
    
        // 3. 绘制小图片
        let width: CGFloat = 80
        let height: CGFloat = 80
        let x: CGFloat = (size.width - width) * 0.5
        let y: CGFloat = (size.height - height) * 0.5
        center.drawInRect(CGRectMake(x, y, width, height))
    
    
        // 4. 取出结果图片
        let resultImage = UIGraphicsGetImageFromCurrentImageContext()
    
        // 5. 关闭上下文
        UIGraphicsEndImageContext()
    
        // 6. 返回结果
        return resultImage
    
    
    
    }
    
    展开全文
  • swift系统自带二维码的生成,可以吧头像放到二维码中间,可实现高清效果

    //MARK: -传进去字符串,生成二维码图片

    private func creatQRCodeImage(text: String) -> UIImage{

        

        //创建滤镜

        let filter = CIFilter(name: "CIQRCodeGenerator")

       //还原滤镜的默认属性

        filter?.setDefaults()

       //设置需要生成二维码的数据

        filter?.setValue(text.dataUsingEncoding(NSUTF8StringEncoding), forKey: "inputMessage")

       //从滤镜中取出生成的图片

        let ciImage = filter?.outputImage

       //这个清晰度不好

        //let bgImage = UIImage(CIImage: ciImage!)

        //这个清晰度好

        let bgImage = createNonInterpolatedUIImageFormCIImage(ciImage!, size: 300)

        //创建一个头像

        let icon = UIImage(named: "navigationbar_pop_highlighted")

       //合成图片(把二维码和头像合并)

        let newImage = creatImage(bgImage, iconImage: icon!)

       //返回生成好的二维码

        return newImage

        }

        

       //MARK: - 根据背景图片和头像合成头像二维码

        private func creatImage(bgImage: UIImage, iconImage:UIImage) -> UIImage{

            

            //开启图片上下文

            UIGraphicsBeginImageContext(bgImage.size)

            //绘制背景图片

            bgImage.drawInRect(CGRect(origin: CGPointZero, size: bgImage.size))

            //绘制头像

            let width: CGFloat = 50

            let height: CGFloat = width

            let x = (bgImage.size.width - width) * 0.5

            let y = (bgImage.size.height - height) * 0.5

            iconImage.drawInRect(CGRect(x: x, y: y, width: width, height: height))

            //取出绘制好的图片

            let newImage = UIGraphicsGetImageFromCurrentImageContext()

            //关闭上下文

            UIGraphicsEndImageContext()

            //返回合成好的图片

            return newImage

        }

        

        //MARK: - 根据CIImage生成指定大小的高清UIImage

       private func createNonInterpolatedUIImageFormCIImage(image: CIImage, size: CGFloat) -> UIImage {

            

            let extent: CGRect = CGRectIntegral(image.extent)

            let scale: CGFloat = min(size/CGRectGetWidth(extent), size/CGRectGetHeight(extent))

            

            let width = CGRectGetWidth(extent) * scale

            let height = CGRectGetHeight(extent) * scale

            let cs: CGColorSpaceRef = CGColorSpaceCreateDeviceGray()!

            let bitmapRef = CGBitmapContextCreate(nil, Int(width), Int(height), 8, 0, cs, 0)!

            

            let context = CIContext(options: nil)

            let bitmapImage: CGImageRef = context.createCGImage(image, fromRect: extent)

            

            CGContextSetInterpolationQuality(bitmapRef,  CGInterpolationQuality.None)

            CGContextScaleCTM(bitmapRef, scale, scale);

            CGContextDrawImage(bitmapRef, extent, bitmapImage);

            let scaledImage: CGImageRef = CGBitmapContextCreateImage(bitmapRef)!

            return UIImage(CGImage: scaledImage)

        }

    展开全文
  • import UIKitclass MineViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //不带图片的二维码图片 let imageViewIcon1 = UIImageView(frame:CGRect(x: 20, y:

    二维码的生成其实不复杂,苹果为我们提供了 CoreImage类库,我们可以用它来生成二维码。

    import UIKit
    
    class MineViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
    
            //不带图片的二维码图片
            let imageViewIcon1 = UIImageView(frame:CGRect(x: 20, y: 100, width: 100, height: 100))
            imageViewIcon1.image = createQRForString(qrString: "https://www.baidu.com", qrImageName: "")
            self.view.addSubview(imageViewIcon1)
    
            //带图片的二维码图片
            let imageViewIcon2 = UIImageView(frame: CGRect(x: 200, y: 100, width: 100, height: 100))
            imageViewIcon2.image = createQRForString(qrString: "https://www.baidu.com", qrImageName: "wechat_72x72")
            self.view.addSubview(imageViewIcon2)
    
        }
    
        func createQRForString(qrString: String?, qrImageName: String?) -> UIImage?{
            if let sureQRString = qrString{
                let stringData = sureQRString.data(using: String.Encoding.utf8, allowLossyConversion: false)
                //创建一个二维码的滤镜
                let qrFilter = CIFilter(name: "CIQRCodeGenerator")
                qrFilter?.setValue(stringData, forKey: "inputMessage")
                qrFilter?.setValue("H", forKey: "inputCorrectionLevel")
                let qrCIImage = qrFilter?.outputImage
    
                // 创建一个颜色滤镜,黑白色
                let colorFilter = CIFilter(name: "CIFalseColor")!
                colorFilter.setDefaults()
                colorFilter.setValue(qrCIImage, forKey: "inputImage")
                colorFilter.setValue(CIColor(red: 0, green: 0, blue: 0), forKey: "inputColor0")
                colorFilter.setValue(CIColor(red: 1, green: 1, blue: 1), forKey: "inputColor1")
                // 返回二维码image
                let codeImage = UIImage(ciImage: (colorFilter.outputImage!.applying(CGAffineTransform(scaleX: 5, y: 5))))
    
                // 中间一般放logo
                if let iconImage = UIImage(named: qrImageName!) {
                    let rect = CGRect(x: 0, y: 0, width: codeImage.size.width, height: codeImage.size.height)
    
                    UIGraphicsBeginImageContext(rect.size)
                    codeImage.draw(in: rect)
                    let avatarSize = CGSize(width: rect.size.width*0.25, height: rect.size.height*0.25)
    
                    let x = (rect.width - avatarSize.width) * 0.5
                    let y = (rect.height - avatarSize.height) * 0.5
                    iconImage.draw(in: CGRect(x: x, y: y, width: avatarSize.width, height: avatarSize.height))
    
                    let resultImage = UIGraphicsGetImageFromCurrentImageContext()
    
                    UIGraphicsEndImageContext()
                    return resultImage
                }
                return codeImage
            }
            return nil
    }
    
    展开全文
  • swift 个性化二维码

    2020-06-05 13:41:10
    普通二维码 前景色,背景色 添加icon 定位角标(里,外) 直接放代码,大家可以根据需求自己封装 import UIKit let outerPositionPathOriginLength: CGFloat = 6.0; let outerPositionTileOriginWidth: ...

    前言:最近项目里面有一个需求,要改变定位角标的颜色
    大至如图:
    在这里插入图片描述

    于是整理了一下
    可以实现以下几个功能:
    • 普通二维码
    • 前景色,背景色
    • 添加icon
    • 定位角标(里,外)

    直接放代码,大家可以根据需求自己封装

    import UIKit
    
    let outerPositionPathOriginLength: CGFloat = 6.0;
    let outerPositionTileOriginWidth: CGFloat = 7.0;
    
    enum QRPosition {
        case TopLeft
        case TopRight
        case BottomLeft
        case Center
        case QuietZone
    }
    
    class QRCodeView: UIImageView {
    
        /// 前景色
        let foreColor = UIColor.black
        /// 背景色
        let backColor = UIColor.white
        
        /// logo 的线宽
        let borderWidth: CGFloat = 50
        /// logo线的颜色
        let borderColor = UIColor.white
        /// logo的宽高
        let logoSize: CGFloat = 80
        /// 定位角标里面的颜色
        let interAngle = UIColor.red
        /// 定位角标外面的颜色
        let outerAngle = UIColor.blue
        
        var outPutImage: CIImage = CIImage()
        
        init(QRCodeStr: String) {
            
            super.init(frame: CGRect(x: 50, y: 200, width: 300, height: 300))
            /// 获取二维码原图
            outPutImage = generateQRCodeFilter(text: QRCodeStr)
            
            /// 前景色 背景色 二维码
    //        self.image = generateColorCodeFilter(qrImage: outPutImage)
            
            ///  高清二维码
            let highImage = setupHighDefinitionUIImage(outPutImage, size: self.frame.size.width)
            
            /// 添加头像
            let headImage = addPicture(qrCodeImage: highImage, image: UIImage(named: "head") ?? UIImage())
            
            /// 修改定位角标
            let angleImage = changeOrientationAngle(image: headImage)
            
            self.image = angleImage
            
            
        }
        
        required init?(coder: NSCoder) {
            fatalError("init(coder:) has not been implemented")
        }
        
        /// 添加logo
        func addPicture(qrCodeImage:UIImage, image: UIImage) -> UIImage {
            //给头像加一个白色圆边(如果没有这个需求直接忽略)
            let image = circleImageWithImage(image, borderWidth: borderWidth, borderColor: borderColor)
            //合成图片
            let newImage = syntheticImage(qrCodeImage, iconImage: image, width: logoSize, height: logoSize)
            
            return newImage
        }
        
        /// 定位角标
        func changeOrientationAngle(image: UIImage) -> UIImage {
            UIGraphicsBeginImageContextWithOptions(image.size, false, UIScreen.main.scale);
            image.draw(in: CGRect(x: 0, y: 0, width: self.frame.size.width, height: self.frame.size.width))
    
            let cifiter = CIFilter(name: "CICrop")
            cifiter?.setValue(CIVector(x: 0, y: 0, z: 10, w: 10), forKey: "inputRectangle")
    
            let coreImage = CIImage(color: CIColor(cgColor: interAngle.cgColor))
            cifiter?.setValue(coreImage, forKey: "inputImage")
    
            if let filteredImage = cifiter?.outputImage {
                /// 里面的框框
                let colorImage = UIImage.init(ciImage: filteredImage)
                self.changePositionInnerColor(image: colorImage, position: .TopLeft)
                self.changePositionInnerColor(image: colorImage, position: .TopRight)
                self.changePositionInnerColor(image: colorImage, position: .BottomLeft)
                /// 外面的框框
                self.changeOuterPositionColor(color: outerAngle, position: .TopLeft)
                self.changeOuterPositionColor(color: outerAngle, position: .TopRight)
                self.changeOuterPositionColor(color: outerAngle, position: .BottomLeft)
            }
    
            guard let newPic = UIGraphicsGetImageFromCurrentImageContext() else { return UIImage() }
            UIGraphicsEndImageContext()
    
            return newPic
        }
        
        
        /// 基本二维码
        func generateQRCodeFilter(text: String) -> CIImage {
            
            ///  创建二维码滤镜
            let qrFilter = CIFilter(name: "CIQRCodeGenerator")
            qrFilter?.setDefaults()
            qrFilter?.setValue(text.data(using: String.Encoding.utf8), forKey: "inputMessage")
            qrFilter?.setValue("H", forKey: "inputCorrectionLevel")
            guard let outputImage = qrFilter?.outputImage else { return CIImage() }
            
            return outputImage
        }
        
        /// 创建颜色滤镜
        func generateColorCodeFilter(qrImage: CIImage) -> UIImage {
            ///  创建颜色滤镜
            let colorFilter = CIFilter(name: "CIFalseColor")
            colorFilter?.setDefaults()
            colorFilter?.setValue(qrImage, forKey: "inputImage")
            let foreColor = CIColor(cgColor: self.foreColor.cgColor)
            let backColor = CIColor(cgColor: self.backColor.cgColor)
            colorFilter?.setValue(foreColor, forKey: "inputColor0")
            colorFilter?.setValue(backColor, forKey: "inputColor1")
    
            guard let outputImage = colorFilter?.outputImage else { return UIImage() }
    
            // 返回二维码image
            let codeImage = UIImage(ciImage: (outputImage.transformed(by: CGAffineTransform(scaleX: 10, y: 10))))
    
            return codeImage
        }
        
        /// 获取Version
        func fetchVersion() -> CGFloat {
            return ((outPutImage.extent.size.width - 21)/4.0 + 1)
        }
        
        /// 设置那个定位角标内框
        func changePositionInnerColor(image: UIImage, position: QRPosition) {
            let rect = self.innerPositionRectWidth(width: self.frame.size.width, version: self.fetchVersion(), postion: position)
            image.draw(in: rect)
        }
        
        /// 设置那个定位角标外框
        func changeOuterPositionColor(color: UIColor, position: QRPosition) {
            let path = self.outerPositionPathWidth(width: self.frame.size.width, version: self.fetchVersion(), position: position)
            color.setStroke()
            path.stroke()
        }
        
        //image: 二维码 iconImage:头像图片 width: 头像的宽 height: 头像的宽
        func syntheticImage(_ image: UIImage, iconImage:UIImage, width: CGFloat, height: CGFloat) -> UIImage{
            //开启图片上下文
            UIGraphicsBeginImageContext(image.size)
            //绘制背景图片
            image.draw(in: CGRect(origin: CGPoint.zero, size: image.size))
            
            let x = (image.size.width - width) * 0.5
            let y = (image.size.height - height) * 0.5
            iconImage.draw(in: CGRect(x: x, y: y, width: width, height: height))
            //取出绘制好的图片
            let newImage = UIGraphicsGetImageFromCurrentImageContext()
            //关闭上下文
            UIGraphicsEndImageContext()
            //返回合成好的图片
            if let newImage = newImage {
                return newImage
            }
            return UIImage()
        }
    
        //MARK: - 生成高清的UIImage
        func setupHighDefinitionUIImage(_ image: CIImage, size: CGFloat) -> UIImage {
            let integral: CGRect = image.extent.integral
            let proportion: CGFloat = min(size/integral.width, size/integral.height)
            
            let width = integral.width * proportion
            let height = integral.height * proportion
            let colorSpace: CGColorSpace = CGColorSpaceCreateDeviceGray()
            let bitmapRef = CGContext(data: nil, width: Int(width), height: Int(height), bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: 0)!
            
            let context = CIContext(options: nil)
            let bitmapImage: CGImage = context.createCGImage(image, from: integral)!
            
            bitmapRef.interpolationQuality = CGInterpolationQuality.none
            bitmapRef.scaleBy(x: proportion, y: proportion);
            bitmapRef.draw(bitmapImage, in: integral);
            let image: CGImage = bitmapRef.makeImage()!
            return UIImage(cgImage: image)
        }
    
        
        /// logo 生成边框
        func circleImageWithImage(_ sourceImage: UIImage, borderWidth: CGFloat, borderColor: UIColor) -> UIImage {
            let imageWidth = sourceImage.size.width + 2 * borderWidth
            let imageHeight = sourceImage.size.height + 2 * borderWidth
            
            UIGraphicsBeginImageContextWithOptions(CGSize(width: imageWidth, height: imageHeight), false, 0.0)
            UIGraphicsGetCurrentContext()
            
            let radius = (sourceImage.size.width < sourceImage.size.height ? sourceImage.size.width:sourceImage.size.height) * 0.5
            let bezierPath = UIBezierPath(arcCenter: CGPoint(x: imageWidth * 0.5, y: imageHeight * 0.5), radius: radius, startAngle: 0, endAngle: .pi * 2, clockwise: true)
            bezierPath.lineWidth = borderWidth
            borderColor.setStroke()
            bezierPath.stroke()
            bezierPath.addClip()
            sourceImage.draw(in: CGRect(x: borderWidth, y: borderWidth, width: sourceImage.size.width, height: sourceImage.size.height))
            
            let image = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return image!
        }
    
        /// 定位角标内边框
        func innerPositionRectWidth(width: CGFloat, version: CGFloat, postion: QRPosition) -> CGRect {
            let leftMargin = width * 3 / ((version - 1) * 4 + 21)
            let tileWidth = leftMargin
            let centerImageWith = width * 7 / ((version - 1) * 4 + 21)
            
            var rect = CGRect(x: leftMargin + 1.5, y: leftMargin + 1.5, width: leftMargin - 3, height: leftMargin - 3)
            rect = rect.integral;
            rect = rect.insetBy(dx: -1, dy: -1);
            
            var offset: CGFloat = 0.0
            
            switch postion {
            case .TopLeft:
                break
            case .TopRight:
                offset = width - tileWidth - leftMargin*2;
                rect = rect.offsetBy(dx: offset, dy: 0);
            case .BottomLeft:
                offset = width - tileWidth - leftMargin * 2;
                rect = rect.offsetBy(dx: 0, dy: offset);
            case .Center:
                rect = CGRect(x: CGPoint.zero.x, y: CGPoint.zero.y, width: centerImageWith, height: centerImageWith)
                offset = width/2 - centerImageWith/2;
                rect = rect.offsetBy(dx: offset, dy: offset);
            default:
                rect = .zero;
            }
            return rect
        }
        
    
        /// 定位角标外边框
        func outerPositionPathWidth(width: CGFloat, version: CGFloat, position: QRPosition) -> UIBezierPath {
            let zonePathWidth = width/((version - 1) * 4 + 21)
            let positionFrameWidth = zonePathWidth * outerPositionPathOriginLength
            let topLeftPoint = CGPoint(x: zonePathWidth * 1.5, y: zonePathWidth * 1.5)
            
            var rect = CGRect(x: topLeftPoint.x - 0.2, y: topLeftPoint.y - 0.2, width: positionFrameWidth, height: positionFrameWidth)
            
            rect = rect.integral;
            rect = rect.insetBy(dx: 1, dy: 1);
            
            var path: UIBezierPath
            var offset: CGFloat = 0.0
            switch position {
            case .TopLeft:
                path = UIBezierPath(rect: rect)
                path.lineWidth = zonePathWidth + 1.5
                path.lineCapStyle = .square
            case .TopRight:
                offset = width - positionFrameWidth - topLeftPoint.x * 2
                rect = rect.offsetBy(dx: offset, dy: 0)
                path = UIBezierPath(rect: rect)
                path.lineWidth = zonePathWidth + 1.5
                path.lineCapStyle = .square
            case .BottomLeft:
                offset = width - positionFrameWidth - topLeftPoint.x * 2
                rect = rect.offsetBy(dx: 0, dy: offset)
                path = UIBezierPath(rect: rect)
                path.lineWidth = zonePathWidth + 1.5
                path.lineCapStyle = .square
            case .QuietZone:
                rect = CGRect(x: zonePathWidth * 0.5, y: zonePathWidth * 0.5, width: width - zonePathWidth, height: width - zonePathWidth)
                path = UIBezierPath(rect: rect)
                path.lineWidth = zonePathWidth + UIScreen.main.scale;
                path.lineCapStyle = .square;
            default:
                path = UIBezierPath()
            }
            return path
        }
    }
    

    调用:

    import UIKit
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            // Do any additional setup after loading the view.
            let codeView = QRCodeView(QRCodeStr: "https://www.baidu.com/index.php?tn=monline_3_dg")
            self.view.addSubview(codeView)  
        }
    }
    

    如果想知道原理,可以看看二维码的生成规则, 写的很详细。
    这个是swift版的,如果你用OC版可以在github上下载 MKQRCode,这个就是参照他写的,在此非常的感谢他😊

    展开全文
  • 封装了一个生成二维码的工具类,使用的时候直接传参UIImageView和url就可直接生成二维码后设置上去,简单方便 ! class QRCodeUtil { static func setQRCodeToImageView(_ imageView: UIImageView?, _ url: ...
  • 原生扫描
  • 二维码图片扫描 绘制扫描的图片的边框 (简单的添加一张图片来识别的没有访问相簿) 以后可能会加上 想知道的请关注一下 @IBAction func detectorQRCode() { // .1 获取需要识别的图片 let image = sourceImageView...
  • 类扩展 import UIKit extension UIViewController{  func showAlert(title:String,message:String,handler:@escaping((UIAlertAction)->Void)){ ... let alert:UIAlertController = UIAler
  • iOS(Swift) 二维码扫描

    2019-04-20 21:53:24
    实现相机扫描二维码, 相册选取图片识别二维码 一. 导入 framework import AVFoundation//二维码扫描 import CoreImage//二维码识别 import AudioToolbox//系统音效 二. 服从协议 ...
  • swift 扫描二维码/条形码,开启闪光灯,识别相册二维码
  • 参考:放肆地使用UIBezierPath和CAShapeLayer画各种图形1.获取摄像头拍摄数据在AVCaptureMetadataOutputObjectsDelegate代理方法中处理 func captureOutput(_ captureOutput: AVCaptureOutput!, ...
  • Swift3.1二维码的生成与扫描 简介 应用市场上,80%甚至更多的APP都有生成或者扫描二维码的功能。如:扫码登录、加好友及扫码支付等。 二维码本质上是一串二进制数据,我们可以在二维码中放入任何信息。如:分享的...
  • 在iOS中有个类CIFilter,通过这个类可以创建各种特定的过滤器,今天我们主要介绍一种二维码发生器(CIQRCodeGenerator)滤镜,通过这个滤镜可以自动生成我们需要的二维码。 首先我们要创建一个二维码滤镜: //创建...
  • Swift 实现的条码扫描组件库 说明 支持设置不同风格的扫码动效 自动检测光线强度,控制闪光开关的显示隐藏 条码太小时候自动拉近镜头效果 例子 直接下载代码,里面Example里面有详细的使用实例代码 ! 安装 ...
  • 效果如下: ViewController.h 1 #import 2 @interface ViewController : UIViewController 3 @property (strong, nonatomic) IBOutlet UIImageView *imgVQRCode; 4 5 @end ViewController.m ... 1 #im
  • //MARK: -传进去字符串,生成二维码图片 private func creatQRCodeImage(text: String, sizeH:CGFloat) -> UIImage{ //text是二维码要带入的信息,sizeH是二维码的高度 //创建滤镜 let filter = CIFilter...
  • 3.30看视频 学到了二维码简单的实现 还有一些动画的实现 今天就先记录一下二维码扫描的简单实现 不太好记手写一遍 学习的基础在于模仿嘛 创建一个实现二维码扫描的步骤 1.首先是懒加载创建 会话 输入设备 输出设备...
  • 实现功能的话就是常见的二维码、条形码的扫描识别。该库都已将完全封装好了,可以直接使用。当然了也可以自己定制样式的。1、首先需要 cocoaPods导入pod ‘LBXScan’, ‘~> 1.1.1’ 在此不做过多介绍,如有需要...
  • swift生成二维码

    2019-08-21 14:14:52
    二维条码/二维码是用某种特定的几何图形按一定规律在平面分布的黑白相间的图形记录数据符号信息的 在编码上巧妙地利用构成计算机内部逻辑基础的“0”、“1”比特流的概念,使用若干个与二进制相对应的几何形体来...
1 2 3 4 5 ... 20
收藏数 561
精华内容 224
关键字:

swift 快速绘制二维码