python生成二維碼
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生成二維碼