【Python應用】自己實現生成二維碼


1. 二維碼隨處可見

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

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

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

以下的內容中,你將會了解到二維碼的基本知識並且學會制作一個屬於你自己的動態二維碼。

讓我們一起來吧。

 

2. 二維碼基礎知識

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

各部分解析:

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

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

 

3. 環境准備

安裝導入qrcode以及myqr庫,依次點擊“開始”-“運行”-輸入“cmd”,通過pip依次安裝:

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()

運行后如下:

 

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,這樣只要掃描到一部分二維碼圖片,二維碼內容還是可以被全部讀到。二維碼容錯率即是指二維碼圖標被遮擋多少后,仍可以被掃描出來的能力。容錯率越高,則二維碼圖片能被遮擋的部分越多。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM