歡迎光臨
每天分享高質量文章

詳解 Python qrcode 二維碼模塊

來源:Python中文社區
ID:python-china

專案地址

  1. https://github.com/lincolnloop/python-qrcode

宣告

  1. import qrcode

使用

QRCode 方法

  1. qrcode.QRCode(

  2.    version=1,

  3.    error_correction=qrcode.ERROR_CORRECT_L,

  4.    box_size=10,

  5.    border=4,

  6.    image_factory=None,

  7.    mask_pattern=None)

引數解釋

1、version:控制二維碼的大小,取值範圍從1到40。取最小值1時,二維碼大小為21*21。取值為 None (預設)或者使用fit=true引數(預設)時,二維碼會自動調整大小。

2、error_correction:控制二維碼糾錯級別。

  • ERRORCORRECTL:大約7%或者更少的錯誤會被更正。

  • ERRORCORRECTM:預設值,大約15%或者更少的錯誤會被更正。

  • ERRORCORRECTQ:大約25%或者更少的錯誤會被更正。

  • ERRORCORRECTH:大約30%或者更少的錯誤會被更正。

3、box_size:控制二維碼中每個格子的像素數,預設為 10。

4、border:控制二維碼四周留白包含的格子數,預設為4。

5、image_factory:選擇生成圖片的形式,預設為 PIL 圖像。

6、mask_pattern:選擇生成圖片的的掩模。

方法屬性解釋

常用方法:

1、add_data(str,optimize=20):添加要轉換的文字到data引數;如果使用了optimize優化引數,資料將被拆分為多個塊來進行優化,以找到一個長度至少為這個值的足夠簡潔的方式來生成二維碼。設置為“0”以避免優化。

2、make(fit=True):當fit引數為真或者沒有給出version引數時,將會呼叫bestfit方法來找到適合資料的最小尺寸。如果沒有設置maskpattern,將會呼叫bestmaskpattern方法來找到找到最有效的掩模圖案。最後將這些資料傳遞給makeImpl方法來生成二維碼。與qrcode本體的make方法不一樣的是,這個方法沒有任何傳回值。

3、makeimage(fillcolor=None, backcolor=None,imagefactory=None):創建二維碼的圖像並傳回,預設為 PIL 圖像。如果要讓二維碼有顏色,可以在這裡設置。

4、clear:清空資料

5、get_matrix:傳回二維碼陣列。

6、print_ascii(out=None, tty=False, invert=False):這個方法就比較有趣了,可以用字符畫的形式來輸出二維碼,但是掃的時候一般都掃不出來。

其中的invert引數是決定是否反轉顏色的引數,預設為假,如果為真的話會這樣:

其他方法:

1、bestfit(start=self.version):找到適合資料所需的最小尺寸。 

2、bestmaskpattern():找到最有效的掩模圖案。 

3、makeImpl(test, maskpattern):生成二維碼的直接函式 

4、mapdata:(內部函式,無需瞭解) 

5、printtty(out=None):用TTY顏色輸出二維碼,如果沒有給出out引數,會使用sys.stdout。

6、setuppositionadjustpattern:(內部函式) 

7、setuppositionprobepattern:(內部函式) 

8、setuptimingpattern:(內部函式) 

9、setuptypeinfo:(內部函式) 

10、setuptypenumber:(內部函式)

屬性:

1、border: 

2、boxsize: 

3、datacache: 

4、datalist: 

5、errorcorrection: 

6、imagefactory: 

7、maskpattern: 

8、modules: 

9、modules_count: 

10、version:

生成 SVG 圖像

qrcode可以生成三種不同的svg圖像,一種是用路徑表示的svg,一種是用矩形集合表示的完整svg檔案,還有一種是用矩形集合表示的svg片段。第一種用路徑表示的svg其實就是矢量圖,可以在圖像放大的時候可以保持圖片質量,而另外兩種可能會在格子之間出現空隙。

這三種分別對應了svg.py中的SvgPathImage、SvgImage和SvgFragmentImage類。在呼叫qrcode.make函式或者實體化QRCode時當作image_factory引數的值傳入就可以了。

  1. import qrcode.image.svg

  2. if method == 'basic':    # Simple factory, just a set of rects.

  3.    factory = qrcode.image.svg.SvgImage

  4. elif method == 'fragment':    # Fragment factory (also just a set of rects)

  5.    factory = qrcode.image.svg.SvgFragmentImage

  6. else:

  7.    # Combined path factory, fixes white space that may occur when zooming

  8.    factory = qrcode.image.svg.SvgPathImage

  9. img = qrcode.make('Some data here', image_factory=factory)

生成 PNG 圖像

執行命令安裝pymaging相關模塊:

  1. pip install git+git://github.com/ojii/pymaging.git#egg=pymaging

  2. pip install git+git://github.com/ojii/pymaging-png.git#egg=pymaging-png

然後給image_factor引數傳入qrcode.image.pure.PymagingImage就可以生成PNG圖片了。

  1. import qrcode from qrcode.image.pure

  2. import PymagingImage

  3. img = qrcode.make('Some data here', image_factory=PymagingImage)

這是作者推薦的方式,但是我個人認為,完全沒有必要這麼麻煩,直接用預設的 PIL 就可以獲取 PNG 圖片了,例子看下文。

make 方法

make方法實際上就是在內部呼叫了QRCode(要轉換的文本).make_image(),最後(預設)傳回了一個PIL圖像物件。

  1. # 顯示圖片qrcode.make("hello world!").show()

  2. # 儲存 PNG 圖片qrcode.make("hello world!").save('hello.png')

run_example 方法

生成一個作者專案網站地址的二維碼並顯示出來。

作者以茄至名,zhihu.com/people/iCheez

《Python人工智慧和全棧開發》2018年07月23日即將在北京開課,120天衝擊Python年薪30萬,改變速約~~~~

*宣告:推送內容及圖片來源於網絡,部分內容會有所改動,版權歸原作者所有,如來源信息有誤或侵犯權益,請聯繫我們刪除或授權事宜。

- END -


更多Python好文請點擊【閱讀原文】哦

↓↓↓

赞(0)

分享創造快樂

© 2020 知識星球   网站地图