代码如下:
from PIL import Image
import qrcode
from io import BytesIO
from flask import Flask, send_file, jsonify, request, Response, json
import sys
import base64
import random
import json
#定义库区块
app = Flask(__name__)
status_base64 = {} #返回状态码json源字典体
#二维码创建路由1
@app.route("/api/QRcode/create/", methods = ["GET", "POST"])
def code_share():
try:
#尝试执行下方代码,判断请求主体的base64编码是否解码异常若异常则执行except区块的代码
if request.method=='GET':
url64 = request.args.get("url") or "aHR0cHM6Ly9iLjRsMi5jbi8="#get获取URL参数
iconm = request.args.get("icon") or "logo"#GET获取logo参数
else:
url64 = request.form.get("url") or "aHR0cHM6Ly9iLjRsMi5jbi8="#POST获取URL参数
iconm = request.form.get("icon") or "logo"#POST获取logo参数
url = base64.b64decode(url64).decode("utf-8") #转化url参数
except Exception as e:
#若检测到处理异常,则转换返回模式变为json,返回相关错误的消息
status_base64["status"] = "error"
status_base64["code"] = 1
status_base64["Msg"] = str(e)
return Response(json.dumps(status_base64), mimetype='application/json')
else:
#若前方try执行正确无异常,则执行生成操作返回数据
return make_code(url,iconm)
#生成器函数
def make_code(url,iconm):
qr = qrcode.QRCode(version=8, error_correction=3, box_size=8, border=4)
qr.add_data(url)
qr.make(fit=True)
img = qr.make_image()#初步生成
img = img.convert("RGBA")
icon = Image.open("res/" + iconm +".png")#获取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.show()
byte_io = BytesIO()
img.save(byte_io, 'PNG')#加载图片流
byte_io.seek(0)
return send_file(byte_io, mimetype='image/png')#返回数据流中的图片
if __name__ == '__main__':
app.run(host="0.0.0.0",port=8080,threaded=True)
介绍
- QR Code码是由日本于1994年9月研制的一-种矩阵二维码符号,它具有一维条码及其它二 维条码所具有的信息容量大、可靠性高、可表示汉字及图象多种文字信息、保密防伪性强等优点。
- qrcode模块是Github_上的一-个开源项目,提供了生成二维码的接口。qrcode默认使用PIL库用于生成图像。由于生成qrcode图片需要依赖Python的图像库,所以需要先安装Python图像库PIL(Python Imaging Library)。
QRCode二维码版本展示
- QR码符号共有40种规格,分别为版本1、版本....版本40版本1的规格为21模块x21模块,版本2为25模块x25模块,以此类推,每一版本符号比前一版本每边增加4个模块,直到版本40,规格为177模块X177模块。其中最高版本40可容纳多达1850个大写字母或2710个数字或1108个字节,或500多个汉字,比普通条码信息容量约高几十倍。由于其高密度编码,信息容量大,所以被广泛采用。
QRCode方法
qrcode.QRCode(
version=1,
error_ correction=qrcode.ERROR_ CORRECT_ _L,
box_ size=10,
border=4,
image_ factory=None,
mask_ pattern=None)
- 参数:
* error_ correction:控制二维码纠错级别。
* ERROR_ CORRECT_ _L:大约7%或者更少的错误会被更正。
* ERROR_ CORRECT_ _M:默认值,大约15%或者更少的错误会被更正。
* ERROR_ CORRECT_ Q:大约25%或者更少的错误会被更正。
* ERROR_ CORRECT_ H:大约30%或者更少的错误会被更正。
* box_ size: 控制二维码中每个格子的像素数,默认为10。
* border:控制二维码四周留白包含的格子数,默认为4。
* image_ factory: 选择生成图片的形式,默认为PIL图像。
* mask_ pattern: 选择生成图片的的掩模。
常用函数
- add_ _data(str,optimize=20):添加要转换的文字到data参数; 如果使用了optimize优化参数,数据将被拆分为多个块来进行优化,以找到一个长度至少为这个值的足够简洁的方式来生成二维码。设置为"0”以避免优化。
- make(fit=True):当fit参数为真或者没有给出version参数时,将会调用best_ fit方法来找到适合数据的最小尺寸。
- make_ image(ill color=None, back_ color=None,image_ factory=None):创建二维码的图像并返回,默认为PIL图像。
使用
如前代码,运行后访问url
参数为url可传入文本,url等
评论 (0)