生成二維碼- 原生二維碼

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

1. 二維碼生成方式

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

2. 生成系統二維碼 <- OC

  1. 導入CoreImage框架(可選)

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

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

3. 生成系統二維碼 <- swift

  1. 導入CoreImage框架

    import CoreImage
    
  2. 通過濾鏡CIFilter生成二維碼

    /** 友情提示: 學習實用技術, 不要太在意語言, 把所有注意力, 放在步驟的實現上面 */
    
    class GeneratorVC: UIViewController {
    
        @IBOutlet weak var inputTV: UITextView!
        @IBOutlet weak var qrCodeImageView: UIImageView!
    
        override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
    
            // 生成二維碼
            // 1. 創建二維碼濾鏡
            let filter = CIFilter(name: "CIQRCodeGenerator")
    
            // 1.1 恢復濾鏡默認設置
            filter?.setDefaults()
    
            // 2. 設置濾鏡的輸入內容
            // 2.1 通過KVC 給里面一個inputMessage實例變量賦值
            // 輸入的內容類型一定是NSData
            let content = inputTV.text
            let data = content.dataUsingEncoding(NSUTF8StringEncoding)
            filter?.setValue(data, forKey: "inputMessage")
    
            // 2.2 設置二維碼糾錯率(可選)
            // 糾錯率越高, 二維碼圖片,越復雜, 掃描識別的時間越長
            filter?.setValue("M", forKey: "inputCorrectionLevel")
    
            // 3. 從濾鏡里面取出結果圖片
            // 3.1 注意: 取出的圖片是ciimage, 并且大小是23* 23 所以需要我們單獨處理
            // (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轉換成為UIImage
            let image = UIImage(CIImage: resultImage)
            print(image.size)
    
            // 4. 顯示結果
            qrCodeImageView.image = image
        }
    }
    
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一、掃描 1、 ZBar ZBar在掃描的靈敏度上,和內存的使用上相對于ZXing上都是較優的,但是對于 “圓角二...
    空白Null閱讀 1,080評論 0 2
  • 一.二維碼概述 1.二維碼的概念 二維碼, 是用某種特定的幾何圖形按一定規律在平面(二維方向上)分布的黑白相間的圖...
    Lucky丶晴閱讀 785評論 0 5
  • 自己的項目大多都是以OC寫的,隨著swift版本的更新和蘋果的力推,學習swift成為刻不容緩的事情,今天我們就聊...
    薄陽映初雪閱讀 3,060評論 2 1
  • 做為一名大三學生,我對于寫作是沒有什么多大的興趣,老師說我們這專業不會寫作就失去了很重要的競爭力,我想了想的確如此...
    陳胖子學長閱讀 151評論 0 0
  • Problem:如何在狀態低迷下重拾動力,能盡量積極地投入工作和生活,擺脫抑郁心情和一無是處的罪惡感? What ...
    Tiff_Q閱讀 382評論 0 0