使用Python實現(xiàn)將網(wǎng)址生成二維碼
前言
qrcode 是指二維碼(Quick Response Code)的一種編碼方式,它是一種特定的條碼格式,可以存儲比傳統(tǒng)條碼更多的信息,如網(wǎng)址、聯(lián)系信息、地理位置等。qrcode 廣泛應用于各種場景,如商品包裝、廣告、支付、票務等,因為它允許用戶通過智能手機等設備快速掃描并訪問相關信息。
在Python中,qrcode 通常指的是使用 qrcode 庫(也稱為 qrcode[pil] 或 qrcode-python)來生成二維碼圖像。這個庫提供了創(chuàng)建和操作二維碼的API,允許開發(fā)者輕松地將數(shù)據(jù)編碼為二維碼圖像,并將其保存到文件或直接在屏幕上顯示。
pip install qrcode Pillow
或者




完整代碼
# 地址生成二維碼
import qrcode
import os
# 創(chuàng)建QRCode對象
qr = qrcode.QRCode(
# 控制二維碼的大小,1是最小的矩陣13x13,數(shù)值越大尺寸越大,可存儲的信息也越多
version=1,
# 控制二維碼的錯誤糾錯能力
# ERROR_CORRECT_L 大約7%或更少的錯誤會被更正
error_correction=qrcode.constants.ERROR_CORRECT_L,
# 控制每一個點(box)的像素數(shù)
box_size=10,
# 控制邊框(最小值為4)
border=4,
)
# 添加數(shù)據(jù)到QRCode對象
# qr.add_data() 方法在 qrcode 庫中用于向 QR 碼對象添加數(shù)據(jù)。
# 這些數(shù)據(jù)并不一定是網(wǎng)站的 URL,它們可以是任何形式的有效字符串,
# 只要這些數(shù)據(jù)能夠被 QR 碼編碼并且解碼后能夠被目標設備或應用程序正確識別和處理。
# https://www.baidu.com
data = input("請輸入您的網(wǎng)址:")
# 注意:如果輸入的內(nèi)容包含特殊字符或非常長的字符串,
# 可能需要在生成二維碼前進行驗證或預處理,以確保其能夠被正確編碼和解碼。
qr.add_data(f"{data}")
qr.make(fit=True) # 參數(shù)fit=True用于在可能的情況下調(diào)整二維碼大小以適應數(shù)據(jù)
# 生成圖像
# 可以將生成的二維碼保存為文件,例如PNG格式
img = qr.make_image(fill='black', back_color='white')
# 保存二維碼圖像并顯示
img_name = input("請輸入您的二維碼照片名字(或輸入帶后綴的名字如mycode.png):")
if not img_name.lower().endswith('.png'):
# 檢查后綴,但注意qrcode默認生成PNG
# 如果用戶沒有輸入.png,則添加.png(因為qrcode生成的是PNG)
img_name = img_name + ".png"
# 允許用戶輸入保存目錄和文件名
save_dir = input("請輸入您想要保存二維碼的目錄(例如:C:/Users/YourName/Pictures/):")
# 確保目錄末尾有斜杠(如果不是根目錄的話)
# 使用os.sep來獲取當前操作系統(tǒng)的路徑分隔符,以確保路徑在不同操作系統(tǒng)上都是正確的
# 首先檢查 save_dir 是否不以 os.sep 結(jié)尾,并且確保它不是一個空字符串。
# 如果這兩個條件都滿足,那么它就在 save_dir 的末尾添加一個路徑分隔符。
if not save_dir.endswith(os.sep) and save_dir != "":
save_dir += os.sep
# 檢查目錄是否存在,不存在則創(chuàng)建(exist_ok=True參數(shù)允許目錄已經(jīng)存在而不引發(fā)錯誤)
os.makedirs(save_dir, exist_ok=True)
# 構(gòu)建完整的文件路徑
full_path = os.path.join(save_dir, img_name)
# 顯示保存的位置
print(f"二維碼生成地址為: {full_path}")
# 保存二維碼圖像(一般為你寫的文件夾目錄下)
img.save(full_path)
print(f"二維碼已生成并保存為: {img_name}")
# 嘗試顯示圖像
# 添加異常處理來捕獲img.show()可能引發(fā)的錯誤,并在無法顯示圖像時打印一條消息。
try:
img.show()
except Exception as e:
print(f"無法顯示圖像:{e}")
效果如下:



知識擴展
你可以使用 Python 的 qrcode 庫輕松地將網(wǎng)址生成二維碼。以下是一個完整指南,包括安裝、基本用法以及高級定制(如調(diào)整大小、顏色等)。
1. 安裝 qrcode 庫
在終端中運行:
pip install qrcode[pil]
安裝 qrcode[pil] 會同時安裝 Pillow 庫,用于生成圖片文件。
2. 基礎示例:生成二維碼并保存為圖片
import qrcode
# 要編碼的網(wǎng)址
url = "https://www.example.com"
# 創(chuàng)建 QRCode 對象
qr = qrcode.QRCode(
version=1, # 控制二維碼的尺寸(1-40),1 是最小尺寸
error_correction=qrcode.constants.ERROR_CORRECT_L, # 糾錯等級
box_size=10, # 每個小格子的大?。ㄏ袼兀?
border=4, # 邊框?qū)挾龋ǜ褡訑?shù))
)
# 添加數(shù)據(jù)
qr.add_data(url)
qr.make(fit=True)
# 生成圖像
img = qr.make_image(fill_color="black", back_color="white")
# 保存圖片
img.save("qrcode_example.png")運行后會在當前目錄生成一張名為 qrcode_example.png 的二維碼圖片,掃描即可訪問該網(wǎng)址。
3. 參數(shù)詳解
| 參數(shù) | 說明 |
|---|---|
version | 整數(shù) 1~40,控制二維碼的網(wǎng)格數(shù)量。1 為 21x21,每增加 1 版本,邊長增加 4 格。設為 None 或 fit=True 可自動調(diào)整。 |
error_correction | 糾錯等級: - ERROR_CORRECT_L:約 7% 的字碼可被修正- ERROR_CORRECT_M(默認):約 15%- ERROR_CORRECT_Q:約 25%- ERROR_CORRECT_H:約 30% |
box_size | 每個小格子的像素大小,例如 10 表示每個格子 10×10 像素。 |
border | 二維碼四周留白的格子數(shù),默認 4(至少需要 4 格以確保掃描識別)。 |
fill_color | 前景色(即二維碼顏色),默認黑色。 |
back_color | 背景色,默認白色。 |
4. 高級用法
生成二維碼并直接顯示(Jupyter Notebook 或 GUI)
import qrcode
from PIL import Image
qr = qrcode.QRCode(box_size=5, border=2)
qr.add_data("https://www.google.com")
qr.make(fit=True)
img = qr.make_image(fill_color="blue", back_color="yellow")
# 在 Jupyter 中顯示
from IPython.display import display
display(img)
# 或者直接調(diào)用 show() 打開系統(tǒng)圖片查看器(需要 Pillow)
img.show()生成二維碼并轉(zhuǎn)為字節(jié)流(不保存文件,直接用于 Web 響應)
import qrcode
from io import BytesIO
qr = qrcode.QRCode()
qr.add_data("https://www.github.com")
qr.make(fit=True)
img = qr.make_image()
# 保存到內(nèi)存中的字節(jié)流
img_byte_arr = BytesIO()
img.save(img_byte_arr, format='PNG')
img_byte_arr = img_byte_arr.getvalue()
# 此時 img_byte_arr 可直接作為 HTTP 響應返回,或?qū)懭胛募炔僮?/pre>自定義二維碼顏色和形狀(使用 Pillow 進一步處理)
import qrcode
from PIL import Image, ImageDraw
# 生成普通二維碼
qr = qrcode.QRCode(box_size=8, border=2)
qr.add_data("https://www.python.org")
qr.make(fit=True)
img = qr.make_image(fill_color="black", back_color="white").convert('RGB')
# 將二維碼顏色改為漸變色(這里簡單示例:將黑色區(qū)域變?yōu)榧t色)
pixels = img.load()
for i in range(img.size[0]):
for j in range(img.size[1]):
if pixels[i, j] == (0, 0, 0): # 黑色部分
pixels[i, j] = (255, 0, 0) # 改為紅色
img.save("red_qrcode.png")5. 注意事項
- 網(wǎng)址長度:二維碼的容量是有限的。較長的網(wǎng)址可以適當提高
version或使用網(wǎng)址縮短服務。 - 糾錯等級:如果要在二維碼中心添加 Logo,建議使用
ERROR_CORRECT_H以保證可讀性。 - 掃描測試:生成后務必用手機掃描驗證,確保正確解析。
6. 完整示例:帶 Logo 的二維碼
import qrcode
from PIL import Image
# 創(chuàng)建二維碼
qr = qrcode.QRCode(
version=5,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
qr.add_data("https://www.example.com")
qr.make(fit=True)
# 生成圖像
img = qr.make_image(fill_color="black", back_color="white").convert('RGB')
# 打開 Logo 圖片并調(diào)整大小
logo = Image.open("logo.png")
logo_size = 80
logo = logo.resize((logo_size, logo_size))
# 計算粘貼位置(中心)
pos = ((img.size[0] - logo_size) // 2, (img.size[1] - logo_size) // 2)
img.paste(logo, pos)
img.save("qrcode_with_logo.png")到此這篇關于使用Python實現(xiàn)將網(wǎng)址生成二維碼的文章就介紹到這了,更多相關Python生成二維碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python使用concurrent.futures模塊實現(xiàn)多進程多線程編程
Python的concurrent.futures模塊可以很方便的實現(xiàn)多進程、多線程運行,減少了多進程帶來的的同步和共享數(shù)據(jù)問題,下面就跟隨小編一起了解一下concurrent.futures模塊的具體使用吧2023-12-12
django ORM之values和annotate使用詳解
這篇文章主要介紹了django ORM之values和annotate使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
windows10 pycharm下安裝pyltp庫和加載模型實現(xiàn)語義角色標注的示例代碼
這篇文章主要介紹了windows10 pycharm下安裝pyltp庫和加載模型實現(xiàn)語義角色標注,本文通過圖文實例相結(jié)合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05
python+elasticsearch實現(xiàn)標簽匹配計數(shù)操作
這篇文章主要介紹了python+elasticsearch實現(xiàn)標簽匹配計數(shù)操作,本文通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2024-04-04
如何解決Python中ModuleNotFoundError錯誤
使用模塊時,了解它們的工作方式以及如何將它們導入我們的代碼非常重要,?如果沒有這種理解或錯誤,我們可能會遇到不同的錯誤,本文我們就來討論一下在Python中解決?ModuleNotFoundError?的方法,希望對大家有所幫助2023-12-12
基于Python實現(xiàn)自動用小寫字母替換文件后綴的大寫字母
本文介紹基于Python語言,基于一個大文件夾,遍歷其中的多個子文件夾,對于每一個子文件夾中的大量文件,批量將其文件的名稱或后綴名中的字母由大寫修改為小寫的方法,文中有相關的代碼示例供大家參考,需要的朋友可以參考下2024-04-04
淺談Pytorch 定義的網(wǎng)絡結(jié)構(gòu)層能否重復使用
這篇文章主要介紹了Pytorch定義的網(wǎng)絡結(jié)構(gòu)層能否重復使用的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-06-06

