【Python應用】本身實現生成二維碼

1. 二維碼隨處可見

在咱們的生活中,二維碼能夠說是無處不在了:加好友?掃個碼!付錢?掃個碼!大街小巷,二維碼隨處可見,甚至小廣告裏也加上了二維碼。python

現在,二維碼已經有了信息獲取、網站跳轉、手機電商以及手機支付等多種功能。你們平時見到最多的應該是黑白的二維碼。就像這樣:app

å¨è¿éæå¥å¾çæè¿°

如下的內容中,你將會了解到二維碼的基本知識而且學會製做一個屬於你本身的動態二維碼。函數

讓咱們一塊兒來吧。網站

 

2. 二維碼基礎知識

二維碼是用某種特定的幾何圖形按必定規律在平面(也即二維方向上)分佈的黑白相間的圖形記錄數據符號信息的,它利用了計算機內部邏輯「0」「1」的概念,用幾個與二進制相對應的幾何圖形來表示文字信息,每種碼都有特定的字符集。編碼

各部分解析:url

  • 位置探測圖形:由三個黑白相間的大正方形嵌套組成,分別位於二維碼左上角、右上角、左下角,目的是爲了肯定二維碼的大小和位置。
  • 定位圖形 :由兩條黑白相間的直線組成,便於肯定二維碼的角度,糾正扭曲。
  • 校訂圖形 :僅在版本2以上存在,由三個黑白相間的小正方形嵌套組成,便於肯定中心,糾正扭曲。
  • 數據和糾錯碼記錄數據信息和相應的糾錯碼,糾錯碼的存在使當二維碼的數據出現容許範圍內的錯誤時,也能夠正確解碼。
  • 版本信息 :僅在版本7以上存在,記錄具體的版本信息。
  • 格式信息 :記錄使用的掩碼和糾錯等級。

好了,基礎知識到這裏,接下來咱們來一步一步實現生成二維碼。spa

 

3. 環境準備

安裝導入qrcode以及myqr庫,依次點擊「開始」-「運行」-輸入「cmd」,經過pip依次安裝:code

pip install qrcode

pip install myqr

 

4. 簡單的開始

而後咱們開始製做一個最簡單的二維碼,代碼以下:對象

import qrcode ''' qrcode.make(str):str爲二維碼包含的文字信息,也能夠是網頁連接,返回二維碼對象 qrcode.save(str):將二維碼以str爲名保存到本地目錄(注意文件的擴展名) qrcode.show():運行時展現二維碼圖案 ''' #建立包含信息的二維碼對象 img = qrcode.make("hello,world") #二維碼保存 img.save('hello.png') #展現二維碼 img.show()

運行後以下:blog

 

5. 進階實現

稍做修改就能夠自行輸入二維碼錶示的信息:

import qrcode content = input("請輸入二維碼包含的內容(文字/url):") img = qrcode.make(content) #二維碼保存 img.save('E:/PythonPractice/新建文件夾/ha.png') #展現二維碼 img.show()

而後咱們給二維碼加一個logo:

from PIL import Image import qrcode def main():     #QRCode()這裏咱們建立了一個對象:     qr = qrcode.QRCode(version=5,error_correction=qrcode.constants.ERROR_CORRECT_H,box_size=8,border=4)     #version:值爲1~40的整數,控制二維碼的大小(最小值是1,是個21×21的矩陣)     #error_correction:控制二維碼的錯誤糾正功能。可取值下列4個常量:      '''     qrcode.constants.ERROR_CORRECT_X:         1. X=L時,大約7%或更少的錯誤能被糾正。          2. X=M(默認)時,大約15%或更少的錯誤能被糾正。         3. X=Q時,25%如下的錯誤會被糾正。         4. X=H時,大約30%或更少的錯誤能被糾正。         '''     #box_size:控制二維碼中每一個小格子包含的像素數。     #border:控制邊框(二維碼與圖片邊界的距離)包含的格子數(默認爲4)     #向二維碼中添加信息     qr.add_data("http://www.jason-niu.com")     qr.make(fit=True)     img = qr.make_image()     #二維碼設置爲彩色     img = img.convert('RGBA')     #打開logo圖片     logo = Image.open("bit.png")     #二維碼尺寸     img_w,img_h = img.size     #默認LOGO最大設爲圖片的1/4     factor = 4     #最大logo尺寸     size_w = int(img_w/factor)     size_h = int(img_h/factor)     #logo的尺寸     logo_w,logo_h = logo.size     if logo_w > size_w or logo_h > size_h:         logo_w = size_w         logo_h = size_h     logo = logo.resize((logo_w,logo_h),Image.ANTIALIAS).convert('RGBA')     l_w = int((img_w-logo_w)/2)     l_h = int((img_h-logo_h)/2) #替換指定位置     img.paste(logo,(l_w,l_h),logo)     img.show()     img.save('北京理工大學主頁.png') if __name__ == '__main__':     main() 

運行結果以下,掃描以後就能登陸到北京理工大學的主頁。

6 . 生成動態二維碼

這下咱們就要用到MyQR庫了

from MyQR import myqr import os myqr.run(words="https://www.baidu.com",version=1, level='H',picture="1.gif",colorized=True, contrast=1.0,brightness=1.0,save_name="3.gif",save_dir=os.getcwd()) #os.getcwd()返回當前工做目錄

下面咱們來詳細的講解一下 myqr.run() 函數裏面的參數

參數 含義 詳細
words 二維碼指向連接 str,輸入連接或者句子做爲參數
version 邊長 int,控制邊長,範圍是1到40,數字越大邊長越大,默認邊長是取決於你輸入的信息的長度和使用的糾錯等級
level 糾錯等級 str,控制糾錯水平,範圍是L、M、Q、H,從左到右依次升高,默認糾錯等級爲'H'
picture 結合圖片 str,將QR二維碼圖像與一張同目錄下的圖片相結合,產生一張黑白圖片
colorized 顏色 bool,使產生的圖片由黑白變爲彩色的
contrast 對比度 float,調節圖片的對比度,1.0 表示原始圖片,更小的值表示更低對比度,更大反之。默認爲1.0
brightness 亮度 float,調節圖片的亮度,其他用法和取值與 contrast 相同
save_name 輸出文件名 str,默認輸出文件名是"qrcode.png"
save_dir 存儲位置 str,默認存儲位置是當前目錄

å¨è¿éæå¥å¾çæè¿°

PS:二維碼具備容錯功能,當二維碼圖片被遮擋一部分後,仍能夠掃描出來。容錯的原理是二維碼在編碼過程當中進行了冗餘,就像是123被編碼成123123,這樣只要掃描到一部分二維碼圖片,二維碼內容仍是能夠被所有讀到。二維碼容錯率便是指二維碼圖標被遮擋多少後,仍能夠被掃描出來的能力。容錯率越高,則二維碼圖片能被遮擋的部分越多。 

相關文章
相關標籤/搜索