生成二維碼- 原生二維碼

    生成二維碼,是指根據(jù)給定的信息,將其按照二維碼的編碼方式生成一張圖片
    原生二維碼:不對(duì)輸出的二維碼圖片進(jìn)行任何加工處理;
    自定義二維碼:對(duì)輸出的二維碼圖片進(jìn)行加工

1. 二維碼生成方式

    > 從iOS7開(kāi)始蘋(píng)果集成了二維碼的生成和讀取功能
    > 此前被廣泛使用的zbarsdk目前不支持64位處理器,2015年2月1號(hào)起, 蘋(píng)果不允許不支持64位處理器的APP上架

2. 生成系統(tǒng)二維碼 <- OC

  1. 導(dǎo)入CoreImage框架(可選)

    #import <CoreImage/CoreImage.h>
    
  2. 通過(guò)濾鏡CIFilter生成二維碼

    // 1. 實(shí)例化二維碼濾鏡
        CIFilter *filter = [CIFilter filterWithName:@"CIQRCodeGenerator"];
    
    // 2. 恢復(fù)濾鏡的默認(rèn)屬性
        [filter setDefaults];
    
    // 3. 將字符串轉(zhuǎn)換成NSData
        NSData *data = [@"IOS筆記" dataUsingEncoding:NSUTF8StringEncoding];
    
    // 4. 通過(guò)KVC設(shè)置濾鏡inputMessage數(shù)據(jù)
        [filter setValue:data forKey:@"inputMessage"];
    
    // 5. 獲得濾鏡輸出的圖像
        CIImage *outputImage = [filter outputImage];
    
    // 6. 將CIImage轉(zhuǎn)換成UIImage,并放大顯示
        return [UIImage imageWithCIImage:outputImage scale:20.0 orientation:UIImageOrientationUp];
    

3. 生成系統(tǒng)二維碼 <- swift

  1. 導(dǎo)入CoreImage框架

    import CoreImage
    
  2. 通過(guò)濾鏡CIFilter生成二維碼

    /** 友情提示: 學(xué)習(xí)實(shí)用技術(shù), 不要太在意語(yǔ)言, 把所有注意力, 放在步驟的實(shí)現(xiàn)上面 */
    
    class GeneratorVC: UIViewController {
    
        @IBOutlet weak var inputTV: UITextView!
        @IBOutlet weak var qrCodeImageView: UIImageView!
    
        override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    
            // 生成二維碼
            // 1. 創(chuàng)建二維碼濾鏡
            let filter = CIFilter(name: "CIQRCodeGenerator")
    
            // 1.1 恢復(fù)濾鏡默認(rèn)設(shè)置
            filter?.setDefaults()
    
            // 2. 設(shè)置濾鏡的輸入內(nèi)容
            // 2.1 通過(guò)KVC 給里面一個(gè)inputMessage實(shí)例變量賦值
            // 輸入的內(nèi)容類型一定是NSData
            let content = inputTV.text
            let data = content.dataUsingEncoding(NSUTF8StringEncoding)
            filter?.setValue(data, forKey: "inputMessage")
    
            // 2.2 設(shè)置二維碼糾錯(cuò)率(可選)
            // 糾錯(cuò)率越高, 二維碼圖片,越復(fù)雜, 掃描識(shí)別的時(shí)間越長(zhǎng)
            filter?.setValue("M", forKey: "inputCorrectionLevel")
    
            // 3. 從濾鏡里面取出結(jié)果圖片
            // 3.1 注意: 取出的圖片是ciimage, 并且大小是23* 23 所以需要我們單獨(dú)處理
            // (23.0, 23.0)
            guard let outImage = filter?.outputImage else {
                return
            }
    
            // 3.2 圖片處理
            // 使用這種方式, 可以把圖片放大處理, 而且保證不失真
            let transform = CGAffineTransformMakeScale(20, 20)
            let resultImage = outImage.imageByApplyingTransform(transform)
    
            // 3.3 把CIImage轉(zhuǎn)換成為UIImage
            let image = UIImage(CIImage: resultImage)
            print(image.size)
    
            // 4. 顯示結(jié)果
            qrCodeImageView.image = image
        }
    }
    
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、掃描 1、 ZBar ZBar在掃描的靈敏度上,和內(nèi)存的使用上相對(duì)于ZXing上都是較優(yōu)的,但是對(duì)于 “圓角二...
    空白Null閱讀 1,143評(píng)論 0 2
  • 一.二維碼概述 1.二維碼的概念 二維碼, 是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的黑白相間的圖...
    Lucky丶晴閱讀 821評(píng)論 0 5
  • 自己的項(xiàng)目大多都是以O(shè)C寫(xiě)的,隨著swift版本的更新和蘋(píng)果的力推,學(xué)習(xí)swift成為刻不容緩的事情,今天我們就聊...
    薄陽(yáng)映初雪閱讀 3,188評(píng)論 2 1
  • 做為一名大三學(xué)生,我對(duì)于寫(xiě)作是沒(méi)有什么多大的興趣,老師說(shuō)我們這專業(yè)不會(huì)寫(xiě)作就失去了很重要的競(jìng)爭(zhēng)力,我想了想的確如此...
    陳胖子學(xué)長(zhǎng)閱讀 176評(píng)論 0 0
  • Problem:如何在狀態(tài)低迷下重拾動(dòng)力,能盡量積極地投入工作和生活,擺脫抑郁心情和一無(wú)是處的罪惡感? What ...
    Tiff_Q閱讀 409評(píng)論 0 0

友情鏈接更多精彩內(nèi)容