Python二維碼產生庫qrcode安裝和使用樣本

來源:互聯網
上載者:User
二維碼簡稱 QR Code(Quick Response Code),學名為快速響應矩陣碼,是二維條碼的一種,由日本的 Denso Wave 公司於 1994 年發明。現隨著智能手機的普及,已廣泛應用於平常生活中,例如商品資訊查詢、社交好友互動、網路地址訪問等等。

安裝 Python 的二維碼庫 -- qrcode

由於產生 qrcode 圖片需要依賴 Python 的映像庫,所以需要先安裝 Python 映像庫 PIL(Python Imaging Library),不然會遇到 "ImportError: No module named Image" 的錯誤:

複製代碼 代碼如下:


sudo easy_install pil

如果安裝 pil 時出現以下錯誤:

複製代碼 代碼如下:


_imagingft.c:73:10: fatal error: 'freetype/fterrors.h' file not found
#include
^
1 error generated.
error: Setup script exited with error: command 'cc' failed with exit status 1

在 StackOverflow 上發現是 Mac 下所依賴的 FreeType 連結變更問題,解決如下:

複製代碼 代碼如下:


ln -s /usr/local/include/freetype2 /usr/local/include/freetype
sudo easy_install -U pil

安裝 qrcode 庫:

複製代碼 代碼如下:


sudo easy_install qrcode

成功安裝後,即可以在終端裡使用 qr 命令產生二維碼了:

複製代碼 代碼如下:


qr "Just a test" > test.png
qr --help

範例程式碼

複製代碼 代碼如下:


import qrcode


qr = qrcode.QRCode(
version=2,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=1
)
qr.add_data("http://jb51.net/")
qr.make(fit=True)
img = qr.make_image()
img.save("dhqme_qrcode.png")

參數 version 表示產生二維碼的尺寸大小,取值範圍是 1 至 40,最小尺寸 1 會產生 21 * 21 的二維碼,version 每增加 1,產生的二維碼就會添加 4 尺寸,例如 version 是 2,則產生 25 * 25 的二維碼。

參數 error_correction 指定二維碼的容錯係數,分別有以下4個係數:

1.ERROR_CORRECT_L: 7%的字碼可被容錯
2.ERROR_CORRECT_M: 15%的字碼可被容錯
3.ERROR_CORRECT_Q: 25%的字碼可被容錯
4.ERROR_CORRECT_H: 30%的字碼可被容錯

參數 box_size 表示二維碼裡每個格子的像素大小。

參數 border 表示邊框的格子厚度是多少(預設是4)。

運行上面代碼會產生敝站的一個 QR Code:

產生帶有表徵圖的二維碼

二維碼的容錯係數(上面所指的 error_correction)越高,產生的二維碼則可允許的殘缺率越大,且二維碼的資料主要儲存在圖片的四個角上,所以在二維碼中間放一個小表徵圖,對二維碼的識別也是不受多大影響的。

對於插入在二維碼上的表徵圖大小,這裡指定限制表徵圖的大小尺寸最大是二維碼長寬的 1/4,以免殘缺太大,影響識別。

最後結合 Python 映像庫(PIL)的操作,把圖片黏貼(paste)在二維碼圖片的中間,便可以產生一個帶有表徵圖的二維碼,具體作業碼如下:

複製代碼 代碼如下:


import Image
import qrcode


qr = qrcode.QRCode(
version=2,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=1
)
qr.add_data("http://jb51.net/")
qr.make(fit=True)

img = qr.make_image()
img = img.convert("RGBA")

icon = Image.open("favicon.png")

img_w, img_h = img.size
factor = 4
size_w = int(img_w / factor)
size_h = int(img_h / factor)

icon_w, icon_h = icon.size
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)

w = int((img_w - icon_w) / 2)
h = int((img_h - icon_h) / 2)
img.paste(icon, (w, h), icon)

img.save("dhqme_qrcode.png")

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.