起源于今天早上的微信群,甲方的新需求。
之前的二维码生成直接用了网上的接口,返回的是单个二维码图片,不能自定义,也不太安全,刚好借着这次的需求自己写一个二维码的生成和生成后对图片进行修改变成甲方希望的样式。
def make_qrcode(eid: str):
base = "xxx"
temp = qrcode.make(base + eid)
bg_img = Image.open(dirname(dirname(abspath(__file__))) + "/bg.jpg")
temp.thumbnail((275, 275))
bg_img.paste(temp, (25, 30))
draw = ImageDraw(bg_img)
ft = ImageFont.truetype(dirname(dirname(abspath(__file__))) + "/arialuni.ttf", 40)
draw.text((330, 260), eid, 'white', font=ft)
output_buffer = BytesIO()
bg_img.save(output_buffer, format='png')
byte_data = output_buffer.getvalue()
# noinspection PyTypeChecker
return io.BufferedReader(io.BytesIO(byte_data))
先在原来make_qrcode基础上修改,之前只是调用了一个接口然后返回,这次是用qrcode库生成一个二维码图片的PIL.image对象,然后新建一个image对象读取背景模板,读取后将生成的二维码粘贴到模板上,并在新的图片上添加文字,最后转化成二进制数据返回。
@app.get("/qrcode")
async def qrcode(eid):
return StreamingResponse(src.util.make_qrcode(eid), media_type="image/jpeg")
然后搞了一个web api来调用二维码的生成~
发表回复