1. 程式人生 > >python生成二維碼

python生成二維碼

思想 隨機數 發送 二維碼 簡單的 簡單 log 兩個類 兩個

python之所以強大,就是因為他有強大的類庫,無論是用於數據分析還是科學計算、以及應用於web開發等等。

還有就是簡潔的語言,(本人一直覺得如果用簡單通俗的語言能講明白一個復雜的道理,說明你已經對這件事徹底的理解了)。

python就這樣語言,能用簡潔的代碼,實現復雜的功能,並且還易於理解和掌握,不過無論用什麽語言編程,最後都是玩

的思想....
今天就給大家說說python生成當下比較流行的二維碼。

1、首先你需要安裝兩個類庫

pip install qrcode #是個用來生成二維碼圖片的第三方模塊,依賴於 PIL 模塊

  pip install pillow

2、以下就是簡單的代碼,如果內容沒有超過2331(我自己測試的最大長度,不知道網上為什麽說是1108)。

生成二維碼圖片後直接用手機掃碼看內容

#!/usr/bin/env python
# -*- coding:utf-8 -*-

import qrcode
str_data = ‘‘‘
這裏是二維碼內容測試,內容的最大長度2331
‘‘‘
print len(str_data)

img = qrcode.make(str_data)
img.save(‘/Users/gide/Downloads/erweima.jpg‘)

3、下面是更完整的帶logo的二維碼封裝代碼。我們生成一個直接搜索圖書的二維碼

logo圖片

  技術分享圖片

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys
reload(sys)
sys.setdefaultencoding(‘utf-8‘)
"""
生成帶logo的二維碼
"""
import qrcode
from PIL import Image
import os

def gen_qrcode(string, path, logo=""):
    """
    生成中間帶logo的二維碼
    需要安裝qrcode, PIL庫
    :param string: 二維碼字符串
    :param path: 生成的二維碼保存路徑
    :param logo: logo文件路徑
    :return:
    """
    qr = qrcode.QRCode(
        version=6,
        error_correction=qrcode.constants.ERROR_CORRECT_H,
        box_size=8,
        border=1
    )
    qr.add_data(string)
    qr.make(fit=True)

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

    if logo and os.path.exists(logo):
        icon = Image.open(logo)

        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)
        icon = icon.convert("RGBA")
        img.paste(icon, (w, h), icon)
    img.save(path)

if __name__ == "__main__":
   gen_qrcode(‘http://www.kindlepush.com/search/?sKey=%E6%B0%91%E5%9B%BD%E5%BA%95%E8%89%B2‘,"/Users/gide/Downloads/erweima.png","logo.jpg")

技術分享圖片

參數說明:

參數 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)。
運行代碼後,會在代碼的當前目錄下生成一個erweima.png的二維碼,用手機掃一下就可以直接跳轉到搜索圖書的頁面了。

所以現在共享單車上貼的二維碼其實就是個請求地址,你掃碼後會發送參數請求他們的服務器,在服務端進行一系列驗證後,就會

啟動開鎖功能。當然ofo這種單車剛開始很可能就是直接把實現生成好的隨機數,返回給你一個,然後你可以使用了。當然真正實際

應用中會比較復雜。

OVER!

python生成二維碼