需求:python生成图片验证码,flask通过请求链接返回给前端img
1. 使用 PIL 生成图片验证码
from PIL import Image, ImageDraw, ImageFont
import random
import io
def random_gen_vcode():
words = [chr(i) for i in range(65, 91)] + [str(i) for i in range(1, 10)]
color = '#f8f8f8'
im = Image.new('RGBA', (63, 28), color)
draw = ImageDraw.Draw(im)
for i in range(4):
font = ImageFont.truetype(r'e:\path\Gabriola.ttf', size=32)
draw.text((13*(i+1), (13-(i+1)*random.randrange(1, 4))), words[random.randrange(0, len(words))], fill='#9999CC')
#im.save(r'e:\path\zz.png')
# v = base64.b64encode(b.getvalue())
# return b'data:image/png;base64,' + v # 生成img base64 的数据
b = io.BytesIO()
im.save(b, format='PNG') # 以png格式保存到io流中
b.seek(0) # 改变流动位置到首位
return b
2. 返回图片流
@app.route('/load_vcode')
def load_vcode():
"""加载验证码"""
return send_file(vcode.random_gen_vcode(), mimetype='image/png')