1. 程式人生 > 其它 >張量、向量、標量的區別

張量、向量、標量的區別

楔子

二維碼在我們的生活中可以說是必不可少的,不單單是手機支付、其它很多地方也都需要掃描二維碼。那麼下面我們就來看看如何使用python來生成二維碼、以及識別二維碼。

關於二維碼,我們來說一下它的結構。當然關於二維碼的結構其實不是太重要,這裡只是提一下,沒興趣可以不用看。

從圖中我們可以看出二維碼結構整體劃分為功能圖形和編碼區兩大部分,功能圖形又細分為:空白區、位置探測圖形、位置探測圖形分隔符、定點陣圖形、校正圖形,而編碼區細分為:格式資訊、版本資訊、資料和糾錯碼字,來簡單瞭解一下每一部分的功能:

  • 空白區:留白,不需要做任何處理
  • 位置探測圖形:協助掃描軟體定位二維碼碼
  • 位置探測圖形分隔符:區分功能圖形和編碼區
  • 定點陣圖形:指示標識密度和確定座標系
  • 校正圖形:校正圖形的數量和位置
  • 格式資訊:存放格式化資料的資訊
  • 版本資訊:二維碼的規格,二維碼符號共有 40 種規格的矩陣
  • 資料和糾錯碼字:實際儲存的二維碼資訊和糾錯碼字(用於修正二維碼損壞帶來的錯誤)

生成二維碼

生成二維碼的話,python有兩個第三方模組:qrcode和MyQR可以幫我我們生成二維碼,下面來看一下這兩個模組的用法。

qrcode

生成比較簡單的二維碼就是,當我們掃描的時候,會自動跳轉到某個頁面。

import qrcode    # 呼叫QRCode,可以接收以下引數 """ version: 二維碼的格子大小,可以是1到40。值越大,格子越大,一般不超過10,選擇3比較合適
error_correction: 二維碼錯誤容許率,預設為qrcode.constants.ERROR_CORRECT_M,容許小於 15% 的錯誤率          此外還有qrcode.constants.ERROR_CORRECT_L: 容許小於 7% 的錯誤率          qrcode.constants.ROR_CORRECT_H: 容許小於 30% 的錯誤率 box_size: 二維碼每個小格子包含的畫素數量 border: 二維碼到圖片邊框的小格子數,預設值為 4         """ qr = qrcode.QRCode() # 事實上裡面的引數我們可以都不指定,預設會選擇一個比較合適的引數
   # 呼叫add_data,指定url。 qr.add_data("https://www.baidu.com/") # 生成二維碼影象,顏色為藍色,背景色為粉色 img = qr.make_image(fill_color='blue', back_color='pink') # 顯示影象,這個會開啟一個臨時檔案 img.show() # 此外,我們還可以儲存到硬碟上 img.save("1.png")    # 事實上,這個img實際上是通過PIL模組得到的,可以理解為裡面Image物件 # 如果你熟悉PIL模組的話,那麼你應該知道可以將裡面Image物件儲存成圖片對應的位元組流 from io import BytesIO buf = BytesIO() img.save(buf) # 將位元組儲存到buf裡面 with open("2.png", "wb") as f:   f.write(buf.getvalue()) # 和直接儲存為1.png是一樣的

外我們在add_data中指定的是一個url,我們也可以不指定url,而是指定一段文字。這樣的話,當掃描的時候就會顯示我們輸入的文字。

MyQR

MyQR也可以用來生成二維碼,但是它和qrcode相比最大的特點就是它可以嵌入圖片當背景。

1 2 3 4 5 6 7 8 9 10 11 from MyQR import myqr    # 主要用到以下幾個引數 # words:文字,可以是一個連結,或者你想說的話(不支援中文,很不友好) # picture:你用到的圖片,作為背景,不然只是一個光禿禿的二維碼 # colorsize:True,表示生成彩圖 # save_name:表示生成的二維碼的名字 myqr.run(words="http://www.bilibili.com",      picture="satori.jpg",      colorized=True,      save_name="bilibili.png")

當掃這個二維碼的時候,就會跳轉到bilibili。指的一提的是,這裡圖片,還可以使用gif格式的動圖,當然生成的圖片也要是gif格式的。

解析二維碼

我們除了可以使用python生成二維碼,還可以解析二維碼,解析二維碼也有兩個模組,一個是zxing、一個是pyzbar。

首先是zxing,不過這個模組有點讓人尷尬,因為這個模組呼叫的是java的介面。也就是說解析二維碼的底層工作是java做的,python是負責呼叫,所以使用這個模組的時候需要你本地有java環境。所以我使用我阿里雲上的centos進行測試。

1 2 3 4 5 6 >>> import zxing >>> reader = zxing.BarCodeReader() >>> barcode = reader.decode('bilibili.png') >>> barcode.parsed 'http://www.bilibili.com' # 是可以解析出來的 >>>

然後看看pyzbar模組,這個模組就不需要java了,直接使用python即可。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import numpy as np from PIL import Image from pyzbar import pyzbar    # 讀取檔案,轉成陣列 im = np.array(Image.open("bilibili.png")) print(pyzbar.decode(im)) # 返回的資訊還是很多的 """ [    Decoded(data=b'http://www.bilibili.com',        type='QRCODE',        rect=Rect(left=35, top=35, width=263, height=264),        polygon=[Point(x=35, y=35), Point(x=35, y=297), Point(x=297, y=299), Point(x=298, y=35)]) ] """    # 拿到內容 print(pyzbar.decode(im)[0].data.decode("utf-8")) # http://www.bilibili.com

兩個模組都是可以正常解析的,以上就是python關於二維碼的一些操作。

以上就是如何用Python生成二維碼、解析二維碼的詳細內容,更多關於Python生成二維碼、解析二維碼的資料請關注指令碼之家其它相關文章!