基于Python編寫一個二維碼生成器_第1頁
基于Python編寫一個二維碼生成器_第2頁
基于Python編寫一個二維碼生成器_第3頁
基于Python編寫一個二維碼生成器_第4頁
基于Python編寫一個二維碼生成器_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第基于Python編寫一個二維碼生成器目錄前言1、安裝第三方庫2、QRCode參數(shù)解釋3、自定義二維碼生成器4、給二維碼加圖片5、全部代碼

前言

二維碼又稱二維條碼,常見的二維碼為QRCode,QR全稱QuickResponse,是一個近幾年來移動設備上超流行的一種編碼方式,它比傳統(tǒng)的BarCode條形碼能存更多的信息,也能表示更多的數(shù)據(jù)類型?,F(xiàn)在的二維碼隨處可見,甚至有人覺得在以后的墓碑上都可以刻一個二維碼,通過掃描該二維碼便可知墓主傳奇的一生。所以如何快速定制自己的二維碼便顯得極為的重要,本文用python生成一個簡單的二維碼生成器,該生成器可以定制二維碼的背景、填充顏色以及二維碼中間的背景圖片。

1、安裝第三方庫

win+R,輸入cmd,進入系統(tǒng)管理員界面,安裝第三方庫

pip

install

qrcode

pip

install

pillow

#PIL的派生分支,python3以上PIL的替代庫

注:PIL是python重要的圖像庫,在給二維碼加圖片時需要用到它,但安裝時出現(xiàn):ERROR:CouldnotfindaversionthatsatisfiestherequirementPIL(fromversions:none)錯誤。原來是python3以上該庫就用其他的庫(pillow)替代了

2、QRCode參數(shù)解釋

version:值為1~40的整數(shù),控制二維碼的大?。ㄗ钚≈凳?,是個1212的矩陣)。如果想讓程序自動確定,將值設置為None,并使用fit參數(shù)即可。error_correction:指定二維碼的容錯系數(shù),分別有以下4個系數(shù):

ERROR_CORRECT_L:7%的字碼可被容錯ERROR_CORRECT_M:15%的字碼可被容錯ERROR_CORRECT_Q:25%的字碼可被容錯ERROR_CORRECT_H:30%的字碼可被容錯

box_size:控制二維碼中每個小格子包含的像素數(shù)。border:控制邊框(二維碼與圖片邊界的距離)包含的格子數(shù)(默認為4,是相關標準規(guī)定的最小值)

3、自定義二維碼生成器

生成一個窗口,可以在輸入框中自定義二維碼的相關信息,包括想輸入的文本(可以是文字或者網(wǎng)址),填充顏色以及背景顏色。代碼如下:

if

__name__

==

'__main__':

window

=

tk.Tk()

window.title('二維碼生成器')

window.geometry('900x600')

label_url

=

tk.Label(window,

text="輸入文本:")

label_url.place(x=50,

y=40)

Entry_input_url

=

tk.Entry()

Entry_input_url.place(x=120,

y=40)

label_fill_color

=

tk.Label(window,

text="填充顏色:")

label_fill_color.place(x=50,

y=80)

Entry_input_fill_color

=

tk.Entry()

Entry_input_fill_color.place(x=120,

y=80)

label_fill_color

=

tk.Label(window,

text="背景顏色:")

label_fill_color.place(x=50,

y=120)

Entry_input_back_color

=

tk.Entry()

Entry_input_back_color.place(x=120,

y=120)

button

=

tk.Button(window,

text='開始生成',

command=create_code)

button.place(x=140,

y=160)

window.mainloop()

結果如下:

4、給二維碼加圖片

#

給二維碼加圖片

#

把顏色模式轉(zhuǎn)換為RGBA,它表示帶透明度掩模的真彩色

img

=

img.convert("RGBA")

#

從文件里加載二維碼中心logo圖片,用Image函數(shù)的open方法

icon

=

Image.open("2.jpg")

#

得出二維碼的寬高

img_w,

img_h

=

img.size

factor

=

4

#

通過二維碼寬高計算出logo圖片寬和高的最大限度

size_w

=

int(img_w

/

factor)

size_h

=

int(img_h

/

factor)

#

獲取logo的寬和高

icon_w,

icon_h

=

icon.size

#

比較logo寬高和最大限度寬高,如果超過最大限度就將logo尺寸調(diào)整到最大限度

if

icon_w

size_w:

icon_w

=

size_w

if

icon_h

size_h:

icon_h

=

size_h

icon

=

icon.resize((icon_w,

icon_h),

Image.ANTIALIAS)

#

根據(jù)logo和圖片的長寬確定logo的位置

w

=

int((img_w

-

icon_w)

/

2)

h

=

int((img_h

-

icon_h)

/

2)

icon

=

icon.convert("RGBA")

#

將logo圖片粘貼到二維碼的指定位置

img.paste(icon,

(w,

h),

icon)

5、全部代碼

window.mainloop()

import

qrcode

import

tkinter

as

tk

from

PIL

import

Image

def

create_code():

content

=

Entry_input_url.get()

fill_color

=

Entry_input_fill_color.get()

back_color

=

Entry_input_back_color.get()

qr

=

qrcode.QRCode(

version=2,

#

二維碼的邊長

#

ERROR_CORRECT_H:

30%的字碼可被容錯,因為插入了圖片,所以增加容錯率

error_correction=qrcode.constants.ERROR_CORRECT_H,

box_size=6,

border=2,

)

qr.make(fit=True)

qr.add_data(content)

img

=

qr.make_image(fill_color=fill_color,

back_color=back_color)

#

給二維碼加圖片

#

把顏色模式轉(zhuǎn)換為RGBA,它表示帶透明度掩模的真彩色

img

=

img.convert("RGBA")

#

從文件里加載二維碼中心logo圖片,用Image函數(shù)的open方法

icon

=

Image.open("2.jpg")

#

得出二維碼的寬高

img_w,

img_h

=

img.size

factor

=

4

#

通過二維碼寬高計算出logo圖片寬和高的最大限度

size_w

=

int(img_w

/

factor)

size_h

=

int(img_h

/

factor)

#

獲取logo的寬和高

icon_w,

icon_h

=

icon.size

#

比較logo寬高和最大限度寬高,如果超過最大限度就將logo尺寸調(diào)整到最大限度

if

icon_w

size_w:

icon_w

=

size_w

if

icon_h

size_h:

icon_h

=

size_h

icon

=

icon.resize((icon_w,

icon_h),

Image.ANTIALIAS)

#

根據(jù)logo和圖片的長寬確定logo的位置

w

=

int((img_w

-

icon_w)

/

2)

h

=

int((img_h

-

icon_h)

/

2)

icon

=

icon.convert("RGBA")

#

將logo圖片粘貼到二維碼的指定位置

img.paste(icon,

(w,

h),

icon)

#

保存二維碼

img.save("qr.png")

photo

=

tk.PhotoImage(file="qr.png")

Label_img

=

tk.Label(window,

image=photo)

Label_img.place(x=300,

y=300)

if

__name__

==

'__main__':

window

=

tk.Tk()

window.title('二維碼生成器')

window.geometry('900x600')

label_url

=

tk.Label(window,

text="輸入文本:")

label_url.place(x=50,

y=40)

Entry_input_url

=

tk.Entry()

Entry_input_url.place(x=120,

y=40)

label_fill_color

=

tk.Label(window,

text="填充顏色:")

label_fill_color.place(x=50,

y=80)

Entry_input_fill_color

=

tk.Entry()

Entry_input_fill_color.place(x=120,

y=80)

label_fill_color

=

tk.Label(window,

te

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論