Python 生成二維碼圖片數(shù)據(jù)
使用qrcode模塊來創(chuàng)建二維碼禾唁。https://github.com/lincolnloop/python-qrcode這里源碼。
import qrcode
import StringIO
import base64
def make_code(text):
qr = qrcode.QRCode(
version=5,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=8,
border=4
)
qr.add_data(text)
qr.make(fit=True)
img = qr.make_image()
img_buffer = StringIO.StringIO()
img.save(img_buffer, 'png')
res = img_buffer.getvalue()
img_buffer.close()
return base64.b64encode(res)
說明:
- 第5~10行創(chuàng)建 qrcode 二維碼對象并設置參數(shù)双仍。參數(shù)說明如下:
字符串比較運算符 | 說明 |
---|---|
version | 值為1~40的整數(shù),控制二維碼的大凶莱浴(最小值是1朱沃,是個12×12的矩陣)。 如果想讓程序自動確定茅诱,將值設置為 None 并使用 fit 參數(shù)即可 |
error_correction | 容錯率:ERROR_CORRECT_L 大約7%或更少的錯誤能被糾正逗物;ERROR_CORRECT_M (默認):大約15%或更少的錯誤能被糾正;ROR_CORRECT_H :大約30%或更少的錯誤能被糾正瑟俭。 |
box_size | 控制二維碼中每個小格子包含的像素數(shù) |
border | 控制邊框(二維碼與圖片邊界的距離)包含的格子數(shù)(默認為4翎卓,是相關標準規(guī)定的最小值) |
- 第11行,填入二維碼中的內容
- 第12行摆寄,將數(shù)據(jù)編譯為QR碼數(shù)組失暴。
- 第13行,根據(jù)QR碼數(shù)據(jù)制作圖像微饥。
- 第14~17行锐帜,將圖片保存到緩存
- 最后轉為 base64返回
html中顯示 Base64類型圖片
<a id="temporary"></a>
<img src="data:image/png;base64,數(shù)據(jù)" id="register_qr" />
<button type="button" onclick="down()">下載</button>
png 可以換成其他圖片后綴
JavaScript 下載base64圖片
// 根據(jù)圖片生成畫布
function convertImageToCanvas(image) {
var canvas = document.createElement("canvas");
canvas.width = image.width;
canvas.height = image.height;
canvas.getContext("2d").drawImage(image, 0, 0);
return canvas;
}
// 下載圖片
function down() {
var sampleImage = document.getElementById("register_qr"),
canvas = convertImageToCanvas(sampleImage);
url = canvas.toDataURL("image/png"); //PNG格式
//獲取a 元素將下載內容填入 a 標簽中的 href 后模擬點擊下載圖片
var triggerDownload = $("#temporary").attr("href", url).attr("download", "二維碼.png");
triggerDownload[0].click();
triggerDownload.remove();
}