Python qrcode二維碼操作——(一)簡單使用qrcode

既然我們是要對二維碼進行創建和解析,那我們就必須先來認識一下什麼是二維碼:
二維碼是一種在一維碼基礎上擴展出來的可讀性條碼,用黑白矩形圖案表示二進制數據;那麼問題又來了,一維碼又是什麼?下面我們經常會在包裝袋上面看到的條形碼:

這就是一維碼,我們可以看見它是由長度相同,粗細不同的線條構成,那麼他是什麼存儲數據的呢?那我們就要找不同點,粗細是他們的變量,即用寬度存儲數據,這是一維方案;
二維碼就是在一維碼的基礎上,長度和寬度都記錄着數據,這就是上面說的在一維的基礎上又增加一個維度;二維碼還有一維碼沒有的定位點和容錯機制,容錯機制可以在沒有辨別全部條碼的時候正確還原條碼上的信息,這樣就能保證在條碼有破損的時候還能夠正確還原;
二維碼的種類有很多,這裏就不贅述了,下面放出我博客的二維碼來結束這一趴:

那麼我們接下來就來學習一下qrcode庫的使用:

  1. 安裝qrcode庫和pillow庫
    pip install pillow        # 因爲這個庫是qrcode的依賴庫,用於處理圖像
    pip install qrcode
  2. 接下來我們就來創建一個二維碼:
    import qrcode        # 導入庫
    
    img = qrcode.make('https://blog.csdn.net/u014663232')
    # 最後會返回一個qrcode.image.pil.PilImage對象,最後會返回一個二維碼圖片對象
    img.save('geeknuo_csdn.png')    # 調用save()方法將圖片對象保存下來

    接下來我們通過原型來看下,它都做了些什麼:

    我們可以看見make()方法在開始創建了一個QRCode對象,然後調用add_data()方法,將我們數據信息添加了進去,最後調用make_image()方法返回了圖片對象;
    那麼我們可以推出最終產生圖片的地方肯定在make_image()裏面,我們接下來看:
      1)首先檢查數據有沒有編譯,如果沒有編譯,就需要先進行編譯;
      2)image_factory我這邊理解的是生成器,這邊我們可以指定生成器,如果沒有指定的話,這裏就會使用PIL作爲生成器,這就是爲什麼依賴pillow庫的原因;
      3)最後就是生成圖像並返回了,這裏還涉及到了等等的參數,下面再詳細說明;

  3. 那麼上面已經生成了一個二維碼,但是不得不說,非常的難看,而且尺寸什麼的都是固定的,那麼接下來我們就來對參數進行設置,定製我們想要的二維碼:
    既然make()最開始是創建了一個QRCode對象,那麼我們先來看下QRCode()中有什麼:

    那麼我們可以看見有這裏有6個參數:
      1)version 表示二維碼的版本號,一種有1~40個版本,最小是21*21,每增加一個版本會增加4個尺寸(注意:這裏的尺寸並不是指生成圖片的大小,而是二維碼的長寬被分成了多少份)
      2)error_correction 指的是糾錯容量,這就是爲什麼在二維碼上面放張圖片還可以被識別出來的原因,它一共有四個級別:
            ERROR_CORRECT_L:大約7%或更少的錯誤能被糾正
            ERROR_CORRECT_M(默認):大約15%或更少的錯誤能被糾正
            ERROR_CORRECT_Q:大約25%或更少的錯誤能被糾正
            ERROR_CORRECT_H:大約30%或更少的錯誤能被糾正
      3)box_size 指的是生成圖片的像素,所以這裏是定義大小的,我們可以看見上面,默認爲10
      4)border 表示二維碼邊框的寬度,同樣的,上面默認是4,也是最小值
      5)image_factory 的參數繼承了qrcode.image.base.BaseImage類,其中可以選擇的類保存在模板根目錄的image文件夾下
           
      6)mask_pattern 選擇生成圖片的掩模,掩模這邊一句兩句說不清楚,可以自行百度,或者看後面的鏈接,我們來看下掩模的過程(圖片來自:http://www.360doc.com/content/16/0919/08/9261962_591906164.shtml):
           
  4. 我們接下來就自定義屬性參數來生成一個二維碼:
    import qrcode
    
    qr = qrcode.QRCode(
        version=10,
        error_correction=qrcode.constants.ERROR_CORRECT_L,
        box_size=20,
        border=10
    )
    
    qr.add_data('https://blog.csdn.net/u014663232')    # 添加二維碼數據 
    qr.make()    # 將數據編譯成qrcode數組
    image = qr.make_image()    # 生成二維碼圖片
    image.save('geeknuo_csdn2.png')    # 保存二維碼圖片
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章