webserver_captcha_image.py 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. # -*- coding: UTF-8 -*-
  2. """
  3. 验证码图片接口,访问`/captcha/1`获得图片
  4. """
  5. from captcha.image import ImageCaptcha
  6. import os
  7. import random
  8. from flask import Flask, request, jsonify, Response, make_response
  9. import json
  10. import io
  11. from log_ware import LogWare
  12. logger = LogWare().get_logger()
  13. # Flask对象
  14. app = Flask(__name__)
  15. basedir = os.path.abspath(os.path.dirname(__file__))
  16. with open("conf/captcha_config.json", "r") as f:
  17. config = json.load(f)
  18. # 配置参数
  19. root_dir = config["root_dir"] # 图片储存路径
  20. image_suffix = config["image_suffix"] # 图片储存后缀
  21. characters = config["characters"] # 图片上显示的字符集 # characters = "0123456789abcdefghijklmnopqrstuvwxyz"
  22. count = config["count"] # 生成多少张样本
  23. char_count = config["char_count"] # 图片上的字符数量
  24. webserver_captcha_url = config["webserver_captcha_url"] # 验证码生成url
  25. webserver_captcha_port = config["webserver_captcha_port"] # 验证码生成端口
  26. # 设置图片高度和宽度
  27. width = config["width"]
  28. height = config["height"]
  29. def response_headers(content):
  30. resp = Response(content)
  31. resp.headers['Access-Control-Allow-Origin'] = '*'
  32. return resp
  33. def gen_special_img():
  34. # 随机文字
  35. text = ""
  36. for j in range(char_count):
  37. text += random.choice(characters)
  38. logger.debug("随机字符: %s", text)
  39. # 生成img文件
  40. generator = ImageCaptcha(width=width, height=height) # 指定大小
  41. img = generator.generate_image(text) # 生成图片
  42. imgByteArr = io.BytesIO()
  43. img.save(imgByteArr, format='PNG')
  44. imgByteArr = imgByteArr.getvalue()
  45. return imgByteArr
  46. @app.route('/captcha/', methods=['GET'])
  47. def show_photo():
  48. if request.method == 'GET':
  49. image_data = gen_special_img()
  50. response = make_response(image_data)
  51. response.headers['Content-Type'] = 'image/png'
  52. response.headers['Access-Control-Allow-Origin'] = '*'
  53. return response
  54. else:
  55. pass
  56. if __name__ == '__main__':
  57. app.run(
  58. host=webserver_captcha_url,
  59. port=webserver_captcha_port,
  60. debug=True
  61. )