日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

Python qrcode模块(生成二维码)

發(fā)布時(shí)間:2024/3/12 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python qrcode模块(生成二维码) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Python qrcode模塊(生成二維碼)

  • 一、Qrcode類解釋
    • 1、QR Codede 由來
    • 2、QRCode二維碼版本
  • 二、Qrcode類構(gòu)造函數(shù)及參數(shù)含義
    • 1、version=None
    • 2、error_correction=constants.ERROR_CORRECT_M
    • 3、box_size=10,
    • 4、border=4
    • 5、image_factory=None
    • 6、mask_pattern=None
  • 三、Qrcode類常用方法
    • 1、qr.make(self, fit=True)
    • 2、qr.add_data(self, data, optimize=20)
    • 3、qr.print_tty(self, out=None)
    • 4、qr.make_image(fillcolor=None, backcolor=None,image_factory=None)
    • 5、qr.clear()
    • 6、qr.get_matrix()
  • 四、image_factory參數(shù)的詳解
    • 1、生成 SVG 圖像
    • 2、生成 PNG 圖像
  • 五、實(shí)例:

一、Qrcode類解釋

qrcode模塊里包含:Qrcode類 調(diào)用Qrcode類時(shí),首先實(shí)例化對(duì)象

1、QR Codede 由來

QR Code碼是由日本于1994年9月研制的一-種矩陣二維碼符號(hào),它具有一維條碼及其它二 維條碼所具有的信息容量大、可靠性高、可表示漢字及圖象多種文字信息、保密防偽性強(qiáng)等優(yōu)點(diǎn)。
依賴于
qrcode模塊是Github_上的一-個(gè)開源項(xiàng)目,提供了生成二維碼的接口。qrcode默認(rèn)使用PIL庫用于生成圖像。由于生成qrcode圖片需要依賴Python的圖像庫,所以需要先安裝Python圖像庫PIL(Python Imaging Library)。
二維碼(2-dimensional bar code),是用某種特定的幾何圖形按一定規(guī)律在平面(二維方向上)分布的黑白相間的圖形記錄數(shù)據(jù)符號(hào)信息的。它能將數(shù)字、英文字母、漢字、日文字母、特殊符號(hào)(如空格,%,/ 等)、二進(jìn)制等信息記錄到一個(gè)正方形的圖片中。

2、QRCode二維碼版本

QR碼符號(hào)共有40種規(guī)格,分別為版本1、版本…版本40版本1的規(guī)格為21模塊x21模塊,版本2為25模塊x25模塊,以此類推,每一版本符號(hào)比前一版本每邊增加4個(gè)模塊,直到版本40,規(guī)格為177模塊X177模塊。其中最高版本40可容納多達(dá)1850個(gè)大寫字母或2710個(gè)數(shù)字或1108個(gè)字節(jié),或500多個(gè)漢字,比普通條碼信息容量約高幾十倍。由于其高密度編碼,信息容量大,所以被廣泛采用。

# 實(shí)例化 :qr = qrcode.Qrcode(version=None,error_correction=constants.ERROR_CORRECT_M,box_size=10, border=4,image_factory=None,mask_pattern=None)

二、Qrcode類構(gòu)造函數(shù)及參數(shù)含義

Qrcode類構(gòu)造函數(shù) def __init__(self, version=None,error_correction=constants.ERROR_CORRECT_M,box_size=10, border=4,image_factory=None,mask_pattern=None):_check_box_size(box_size)self.version = version and int(version)self.error_correction = int(error_correction)self.box_size = int(box_size)# Spec says border should be at least four boxes wide, but allow for# any (e.g. for producing printable QR codes).self.border = int(border)_check_mask_pattern(mask_pattern)self.mask_pattern = mask_patternself.image_factory = image_factoryif image_factory is not None:assert issubclass(image_factory, BaseImage)self.clear()

參數(shù)詳解:

1、version=None

一個(gè)整數(shù),范圍為1到40,表示二維碼的大小(最小值是1,是個(gè)12×12的矩陣),如果想讓程序自動(dòng)生成,將值設(shè)置為 None 并使用 fit=True 參數(shù)即可

2、error_correction=constants.ERROR_CORRECT_M

二維碼的糾錯(cuò)范圍,可以選擇4個(gè)常量:1. ERROR_CORRECT_L 7%以下的錯(cuò)誤會(huì)被糾正2. ERROR_CORRECT_M (default) 15%以下的錯(cuò)誤會(huì)被糾正3. ERROR_CORRECT_Q 25 %以下的錯(cuò)誤會(huì)被糾正4. ERROR_CORRECT_H. 30%以下的錯(cuò)誤會(huì)被糾正

3、box_size=10,

控制二維碼中每個(gè)小格子包含的像素?cái)?shù)

4、border=4

控制邊框(二維碼與圖片邊界的距離)包含的格子數(shù)(默認(rèn)為4,是相關(guān)標(biāo)準(zhǔn)規(guī)定的最小值)

5、image_factory=None

選擇生成圖片的形式,默認(rèn)為PIL圖像

6、mask_pattern=None

選擇生成圖片的的掩模

三、Qrcode類常用方法

1、qr.make(self, fit=True)

fit=True自動(dòng)生成大小適中的二維碼,當(dāng)version=None時(shí)fit=True才起作用

2、qr.add_data(self, data, optimize=20)

optimize=20 :優(yōu)化:數(shù)據(jù)將被分割成多個(gè)塊,通過找到至少這個(gè)長度的壓縮模式來優(yōu)化QR大小。 設(shè)置為“0”以完全避免優(yōu)化

3、qr.print_tty(self, out=None)

僅使用TTY顏色輸出二維碼。如果數(shù)據(jù)尚未編譯,請(qǐng)先進(jìn)行編譯。

4、qr.make_image(fillcolor=None, backcolor=None,image_factory=None)

從二維碼數(shù)據(jù)制作圖像。如果數(shù)據(jù)還沒有編譯好,就先做創(chuàng)建二維碼的圖像并返回, 默認(rèn)為 PIL 圖像。如果要讓二維碼有顏色,可以在這里設(shè)置

5、qr.clear()

清空數(shù)據(jù)

6、qr.get_matrix()

返回二維碼數(shù)組

四、image_factory參數(shù)的詳解

make_image()生成二維碼時(shí),默認(rèn)設(shè)置的是PIL圖像工具

if image_factory is None:# Use PIL by defaultfrom qrcode.image.pil import PilImageimage_factory = PilImage

1、生成 SVG 圖像

qrcode可以生成三種不同的svg圖像,一種是用路徑表示的svg,一種是用矩形集合表示的完整svg文件,還有一種是用矩形集合表示的svg片段。第一種用路徑表示的svg其實(shí)就是矢量圖,可以在圖像放大的時(shí)候可以保持圖片質(zhì)量,而另外兩種可能會(huì)在格子之間出現(xiàn)空隙。這三種分別對(duì)應(yīng)了svg.py中的SvgPathImage、SvgImage和SvgFragmentImage類。在調(diào)用qrcode.make函數(shù)或者實(shí)例化QRCode時(shí)當(dāng)作image_factory參數(shù)的值傳入就可以了。

import qrcode.image.svg

if method == 'basic': # Simple factory, just a set of rects.factory = qrcode.image.svg.SvgImage elif method == 'fragment': # Fragment factory (also just a set of rects)factory = qrcode.image.svg.SvgFragmentImage else:# Combined path factory, fixes white space that may occur when zoomingfactory = qrcode.image.svg.SvgPathImage img = qrcode.make('Some data here', image_factory=factory) # 通過make函數(shù)二維碼,二make函數(shù)內(nèi)部封裝生成二維碼make_image(),記住make是一個(gè)函數(shù),不是Qrcode類的方法 # 'Some data here':是相當(dāng)于add_data()

2、生成 PNG 圖像

執(zhí)行命令安裝pymaging相關(guān)模塊: pip install git+git://github.com/ojii/pymaging.git#egg=pymaging pip install git+git://github.com/ojii/pymaging-png.git#egg=pymaging-png 然后給image_factor參數(shù)傳入qrcode.image.pure.PymagingImage就可以生成PNG圖片了。 import qrcode from qrcode.image.pure import PymagingImage img = qrcode.make('Some data here', image_factory=PymagingImage)

這是作者推薦的方式,但是我個(gè)人認(rèn)為,完全沒有必要這么麻煩,直接用默認(rèn)的 PIL 就可以獲取 PNG 圖片了,例子看下文。

make函數(shù):實(shí)際上就是在內(nèi)部調(diào)用了QRCode(要轉(zhuǎn)換的文本).make_image(),最后(默認(rèn))返回了一個(gè)PIL圖像對(duì)象。

# 顯示圖片qrcode.make("hello world!").show() 保存 PNG 圖片qrcode.make("hello world!").save('hello.png')

擴(kuò)展:
1、qrcode.make(“hello world!”) 是模塊的函數(shù)
2、qr.make(fit=True) 只是Qrcode類的一個(gè)方法 ,不要混合這兩個(gè)make

make函數(shù) def make(data=None, **kwargs): qr = QRCode(**kwargs)qr.add_data(data)return qr.make_image() # 1、**kwargs 可以為version,error_correction,box_size=10, border=4,image_factory=None,mask_pattern=None # 2、make(data=None, **kwargs)函數(shù)內(nèi)部調(diào)用的就是QRCode()實(shí)例化的對(duì)象qr.make()是Qrcode類的方法 qr = qrcode.Qrcode(version=None,error_correction=constants.ERROR_CORRECT_M,box_size=10, border=4,image_factory=None,mask_pattern=None) qr.make(fit=True) #當(dāng)version為None, 自動(dòng)生成大小適中的二維碼

五、實(shí)例:

import qrcodeqr = qrcode.QRCode(version=None,error_correction=qrcode.constants.ERROR_CORRECT_L,border=4,box_size=10)img = qrcode.make('ssssssssssssss',version=4,border=4,box_size=12)img.save('path.jpg') # 以文件形式保存圖片(參數(shù):為文件路徑)print(img,type(img)) # <qrcode.image.pil.PilImage object at 0x00000000028EE348> <class 'qrcode.image.pil.PilImage'>print(img.box_size)# 12 # 二維碼一個(gè)格最小大小(像素)print(img.width)# 33print(img.size)# (492, 492) img對(duì)象(圖片)的長和寬

總結(jié)

以上是生活随笔為你收集整理的Python qrcode模块(生成二维码)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。