Swift 3.0 二維碼的掃描,識別與生成(帶前景圖片),

用Swift 3.0寫的微博,實現(xiàn)了二維碼的生成,掃描與識別

項目已上傳Github Github傳送門
代碼已封裝好,直接將HZQRCodeTool文件夾加到工程中即可,使用參考GitHub項目即可

圖片

二維碼生成(帶前景圖片)

二維碼生成

核心代碼如下

class func generatorQRCode(input: String,
                               center: UIImage?) -> UIImage {
        
        // 1.創(chuàng)建二維碼濾鏡
        let filter = CIFilter(name: "CIQRCodeGenerator")
        
        // 1.1.回復濾鏡默認設置
        filter?.setDefaults()
        
        // 2.設置濾鏡輸入數(shù)據(jù)
        let data = input.data(using: .utf8)
        // KVC
        filter?.setValue(data, forKey: "inputMessage")
        
        // 2.1.設置二維碼的糾錯率
        /*
         L水平: 7%的字碼可被修正
         M水平: 15%的字碼可被修正
         Q水平: 25%的字碼可被修正
         H水平: 30%的字碼可被修正
         */
        filter?.setValue("M", forKey: "inputCorrectionLevel")
        
        // 3.從二維碼濾鏡里面, 獲取結果圖片
        guard var image = filter?.outputImage else {
            print("生成失敗")
            return UIImage()
        }
        
        // 3.1.圖片處理
        let transform = CGAffineTransform.init(scaleX: 20, y: 20)
        image = image.applying(transform)
        
        var resultImage = UIImage(ciImage: image)
        
        // 3.2.前景圖片
        if center != nil {
            
            resultImage = getNewImage(source: resultImage, center: center!)
        }
        
        return resultImage
    }

二維碼掃描 可同時識別多個二維碼

二維碼掃描

核心代碼,自己封裝了一個類,具體代碼可見GitHub項目.

HZQRCodeTool.shared.startScan(inView: view,
                              isDrawCodeFrameFlag: true)
        { [weak self] (resultStrs) in
            
            var resultMessage = resultStrs.description
            
            if resultStrs.count == 0 {
                resultMessage = "未識別到二維碼"
            }
            
            let alert = UIAlertController(title: "識別結果", message: resultMessage, preferredStyle: .alert)
            let action = UIAlertAction(title: "關閉", style: .cancel, handler: nil)
            alert.addAction(action)
            self?.present(alert, animated: true, completion: nil)
        }

讀取圖片中二維

讀取圖片中二維碼

核心代碼

/// 識別圖片中的二維碼
    ///
    /// - Parameters:
    ///   - image: 原始圖片
    ///   - isDrawQRCodeFrame: 是否需要繪制描邊框,默認為 false
    /// - Returns: 元祖(結果字符串組成的數(shù)組, 繪制好二維碼邊框的圖片(如果不要求繪制,則返回原始圖片))
    class func detectorQCodeImage(image: UIImage,
                                  isDrawQRCodeFrame: Bool = false) -> (resultStrs: [String], resultImage: UIImage) {
        
        guard let imageCi = CIImage(image: image) else {
            return ([], image)
        }
        
        // 1.開始識別
        // 1.1.創(chuàng)建一個二維碼探測器
        let detector = CIDetector(ofType: CIDetectorTypeQRCode,
                                  context: nil,
                                  options: [CIDetectorAccuracy : CIDetectorAccuracyHigh])
        
        // 1.2.直接探測二維碼特征
        guard let features = detector?.features(in: imageCi) else {
            return ([], image)
        }
        
        // 存儲處理好的圖片
        var resultImage = image
        
        // 存儲掃描結果數(shù)組
        var result = [String]()
        for feature in features {
            
            let qrFeature = feature as! CIQRCodeFeature
            result.append(qrFeature.messageString ?? "")
            if isDrawQRCodeFrame == true {
                resultImage = drawFrame(image: resultImage, feature: qrFeature)
            }
        }
        
        return (result, resultImage)
    }

再來一發(fā) Github傳送門

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末躁锡,一起剝皮案震驚了整個濱河市交掏,隨后出現(xiàn)的幾起案子巡李,更是在濱河造成了極大的恐慌丛塌,老刑警劉巖凡简,帶你破解...
    沈念sama閱讀 206,013評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異我碟,居然都是意外死亡档礁,警方通過查閱死者的電腦和手機歪玲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,205評論 2 382
  • 文/潘曉璐 我一進店門秕衙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蠢甲,“玉大人,你說我怎么就攤上這事据忘○信#” “怎么了?”我有些...
    開封第一講書人閱讀 152,370評論 0 342
  • 文/不壞的土叔 我叫張陵勇吊,是天一觀的道長曼追。 經(jīng)常有香客問我,道長汉规,這世上最難降的妖魔是什么礼殊? 我笑而不...
    開封第一講書人閱讀 55,168評論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上晶伦,老公的妹妹穿的比我還像新娘碟狞。我一直安慰自己,他們只是感情好坝辫,可當我...
    茶點故事閱讀 64,153評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著射亏,像睡著了一般近忙。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上智润,一...
    開封第一講書人閱讀 48,954評論 1 283
  • 那天及舍,我揣著相機與錄音,去河邊找鬼窟绷。 笑死锯玛,一個胖子當著我的面吹牛,可吹牛的內容都是我干的兼蜈。 我是一名探鬼主播攘残,決...
    沈念sama閱讀 38,271評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼为狸!你這毒婦竟也來了歼郭?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,916評論 0 259
  • 序言:老撾萬榮一對情侶失蹤辐棒,失蹤者是張志新(化名)和其女友劉穎病曾,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體漾根,經(jīng)...
    沈念sama閱讀 43,382評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡泰涂,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,877評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了辐怕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片逼蒙。...
    茶點故事閱讀 37,989評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖寄疏,靈堂內的尸體忽然破棺而出其做,到底是詐尸還是另有隱情,我是刑警寧澤赁还,帶...
    沈念sama閱讀 33,624評論 4 322
  • 正文 年R本政府宣布妖泄,位于F島的核電站,受9級特大地震影響艘策,放射性物質發(fā)生泄漏蹈胡。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,209評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望罚渐。 院中可真熱鬧却汉,春花似錦、人聲如沸荷并。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,199評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽源织。三九已至翩伪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間谈息,已是汗流浹背缘屹。 一陣腳步聲響...
    開封第一講書人閱讀 31,418評論 1 260
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留侠仇,地道東北人轻姿。 一個月前我還...
    沈念sama閱讀 45,401評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像逻炊,于是被迫代替她去往敵國和親互亮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,700評論 2 345

推薦閱讀更多精彩內容