python Idea and Example of Image Stream Transmission of url Converting Two dimensional Code
- 2021-08-31 08:21:38
- OfStack
1. Scenarios
Dynamically generate URL for 2D code front-end display (WeChat payment, etc.)-"
1. Static file path access
Returns URL_name, (a tag, src static route access)
2. Streaming, front-end rendering
The binary stream returns to the front end, which is displayed according to the binary stream code type
3. Front-end js generation
The background obtains code_url paid by WeChat, and the front-end js generates code_url into a 2-dimensional code and renders it
Using the python_web framework-"tornado
manager.py
import os
import asyncio
import tornado.ioloop
import tornado.httpserver
import tornado.web
import tornado.options
from tornado.options import define, options, parse_command_line
from apps import UrlHandler, Url2Handler, Url3Handler
define("port", default=8000, type=int)
def create_app():
settings = {
"template_path": os.path.join(os.path.dirname(__file__), "templates"),
"static_path": os.path.join(os.path.dirname(__file__), "static"),
}
application = tornado.web.Application(
handlers=[
(r"/url", UrlHandler),
(r"/url2", Url2Handler),
(r"/url3", Url3Handler),
],
debug=True,
**settings,
)
return application
if __name__ == '__main__':
parse_command_line()
app = create_app()
server = tornado.httpserver.HTTPServer(app)
server.listen(options.port)
asyncio.get_event_loop().run_forever()
apps.py
import tornado.web
from manager_handler import gen_qrcode, gen_qrcode_obj,gen_qrcode_buf
class BaseHandler(tornado.web.RequestHandler):
pass
class UrlHandler(BaseHandler):
def get(self):
# Get a link
self.render('qrcode.html', title='url', data='URL- Submit ', img_stream='')
async def post(self):
# Generate 2 Dimension code
url = self.get_argument('url_str')
# URL Conversion 2 Dimension code
img_stream = gen_qrcode(url)
await self.render('qrcode.html', title='qrcode', data=' Scan code payment ', img_stream=img_stream)
class Url2Handler(BaseHandler):
def get(self):
# Get a link
self.render('qrcode.html', title='url', data='URL- Submit ', img_stream='')
async def post(self):
# Generate 2 Dimension code
url = self.get_argument('url_str')
# URL Conversion 2 Dimension code
img_stream = gen_qrcode_obj(url=url)
# await self.render('qrcode.html', title='qrcode', data=' Scan code payment ', img_stream=img_stream)
self.set_header('Content_Type', 'image/jpg')
self.set_header('Content_length', len(img_stream))
self.write(img_stream)
class Url3Handler(BaseHandelr):
def get(self):
self.render('qrcode.html', title='url', data='URL- Submit ', img_stream='')
def post(self):
url = self.get_argument('url')
img_stream = gen_qrcode_buf(url)
self.set_header('Content-Type', 'image/png')
self.write(img_stream)
manager_handler.py
import qrcode
import io
import base64
import time
def gen_qrcode(url):
"""
Mode 1 : URL Conversion 2 Dimension code
:param url: Conversion 2 Dimensional code URL
:return: base64 Coded 2 Binary flow 2 Dimension code data
"""
qr = qrcode.make(url)
buf = io.BytesIO()
qr.save(buf)
img_buf = buf.getvalue()
img_stream = base64.b64encode(img_buf)
return img_stream
def gen_qrcode_obj(version=1, box_size=10, border=4, url=None):
"""
Mode 2 : URL Conversion 2 Dimension code (picture stream transmission, template Need to be specified data:base64 Coding)
:param version:
:param box_size:
:param border:
:return:
"""
qr = qrcode.QRCode(
version=version,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=box_size,
border=border,
)
url = "https://www.12dms.com" if url is None else url
save_name = "./" + "qrcode" + str(time.time()) + ".png"
qr.add_data(url)
qr.make()
img = qr.make_image()
img.save(save_name.encode())
with open(save_name, 'rb') as img_f:
img_stream = img_f.read()
img_stream = base64.b64encode(img_stream)
print(img_stream)
return img_stream
def gen_qrcode_buf(words):
qr = qrcode.make(words)
buf = io.BytesIO()
qr.save(buf, 'png')
qr_buf = buf.getvalue()
# img_stream = base64.b64encode(qr_buf)
return qr_buf
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{% block title %}{% end %}</title>
{% block head %}{% end %}
</head>
<body>
<h1 style="text-align: center">
{% block h1 %}{{ data }}{% end %}
</h1>
{% block content %}{% end %}
</body>
</html>
qrcode.html
{% extends "base.html" %}
{% block title %}
{{ title }}
{% end %}
{% block h1 %}
{{ data }}
{% end %}
{% block content %}
<form method="post" action="" >
<p>
Enter the to be converted URL : <input name="url_str"/>
<br>
{# {{ img_stream }}#}
{% if img_stream %}
<img style="width:180px" src="data:;base64,{{ img_stream }}" alt="">
{% end %}
</p>
<br>
<input id="submit" type="submit" value=" Generate 2 Dimension code ">
</form>
{% end %}
The above is the python-picture streaming ideas and examples (url conversion 2D code) details, more information about python picture streaming information please pay attention to other related articles on this site!