Python 生成一個二維碼

python是所有編程語言中模塊最豐富的

生活中常見的二維碼功能在使用python第三方庫來生成十分容易

一.只需要安裝引用qrcode包即可

當然,我們需要先安裝幾個依賴包:

sudo pip install pillow
sudo pip install numpy
sudo pip install imageio
sudo pip install myqr
sudo pip install qrcode

二.什麼是二維碼:

問:什麼是QRcode呢?
答:二維碼(2-dimensional bar code),是用某種特定的幾何圖形按一定規律在平面(二維方向上)分佈的黑白相間的圖形記錄數據符號信息的。它能將數字、英文字母、漢字、日文字母、特殊符號(如空格,%,/ 等)、二進制等信息記錄到一個正方形的圖片中。
因此,在轉換的過程中,離不開編碼壓縮方式。在許多種類的二維條碼中,常用的碼制有:Data Matrix,Maxi Code,Aztec,QR Code,Vericode,PDF417,Ultracode,Code 49,Code 16K等。
二維碼在現實生活中的應用越來與普遍,歸功於 QR code 碼制的流行。我們常說的二維碼就是它,所以,二維碼又被稱爲 QR code。
QR code 是一種矩陣式二維條碼(又稱棋盤式二維條碼)。它是在一個矩形空間通過黑、白像素在矩陣中的不同分佈進行編碼。在矩陣相應元素位置上,用點(方點、圓點或其他形狀)的出現表示二進制“1”,點的不出現表示二進制的“0”,點的排列組合確定了矩陣式二維條碼所代表的意義。
我們的目的是要使用 Python 生成 QR 碼,那我們需要先了解二維碼(QR 碼)的結構。根據標準(ISO/IEC 18004),我們可以瞭解到 QR 碼結構如下:

二維碼的繪製大概過程如下:
在二維碼的左上角、左下角、右上角繪製位置探測圖形,位置探測圖形一定是一個 7x7 的矩陣;
(1)繪製校正圖形,校正圖形一定是一個 5x5 的矩陣;
(2)繪製兩條連接三個位置探測圖形的定位圖形;
(3)在上述圖片的基礎上,繼續繪製格式信息;
(4)接着繪製版本信息;
(5)填充數據碼和糾錯碼到二維碼圖中;
(6)最後繪製蒙版圖案。因爲按照上述方式填充內容,可能會出現大面積空白或黑塊的情況,導致掃描識別十分困難。所以需要對整個圖像與蒙版進行蒙版操作(Masking),蒙版操作即爲異或 XOR 操作。在這一步,我們可以將數據排列成各種圖片。

 

三.簡單運用:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import qrcode

img = qrcode.make("good good study, day day up!")
img.save("samll.png")

四.簡單介紹的運用:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import qrcode
def qrcode2():
    qr = qrcode.QRCode(
        version = 1,
        error_correction = qrcode.constants.ERROR_CORRECT_L,
        #error_correction指的是糾錯容量,這就是爲什麼二維碼上面放一個小圖標也能掃出來,糾錯容量有四個級別,分別是
        #L級別,7%或更少的錯誤能修正   M級別,15%或更少的錯誤能修正,也是qrcode的默認級別
        #Q級別,25%或更少的錯誤能修正   H級別,30%或更少的錯誤能修正
        box_size = 10,#box_size 指的是生成圖片的像素
        border = 4,#border 表示二維碼的邊框寬度,4是最小值
    )
    qr.add_data('掃一掃需要展示的信息')
    qr.make(fit = True)

    img = qr.make_image()
    img.save('second.png')


if __name__ == "__main__":
    qrcode2()

五.帶圖片的運用:

#!/usr/bin/python
# -*- coding: UTF-8 -*-
import qrcode
from PIL import Image
def qrcode2():
    qr = qrcode.QRCode(
        version = 2,
        error_correction = qrcode.constants.ERROR_CORRECT_H,
        box_size = 10,#box_size 指的是生成圖片的像素
        border = 1,#border 表示二維碼的邊框寬度,4是最小值
    )
    qr.add_data("www.baidu.com")
    qr.make(fit = True)

    img = qr.make_image()
    img = img.convert("RGBA")
    img_w,img_h = img.size 
    factor = 3
    size_w = int(img_w / factor)
    size_h = int(img_h / factor)
    icon = Image.open("snake.png")
    icon_w,icon_h = icon.size
    if icon_w > size_w:
        icon_w = size_w
    if icon_h > size_h:
        icon_h = size_h
    icon = icon.resize((icon_w,icon_h),Image.ANTIALIAS)
    w = int((img_w - icon_w) / 2)
    h = int((img_h - icon_h) / 2)
    img.paste(icon, (w, h), icon)
    img.save("three.png")


if __name__ == "__main__":
    qrcode2()

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章