python-图片流传输的思路及示例(url转换二维码)


Posted in Python onDecember 21, 2020

1.场景

  • 将URL动态生成二维码前端展示(微信支付等,)--》

1.静态文件路径访问
返回URL_name,(a标签,src 静态路由访问)

2.流传输,前端渲染
二进制流返回前端,前端根据二进制流编码类型显示

3.前端js生成
后台获取到微信支付的code_url,前端js将code_url生成二维码,并渲染

  • 实际代码

使用python_web 框架--》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):
    # 获取链接
    self.render('qrcode.html', title='url', data='URL-提交', img_stream='')

  async def post(self):
    # 生成二维码
    url = self.get_argument('url_str')

    # URL转换二维码
    img_stream = gen_qrcode(url)
    await self.render('qrcode.html', title='qrcode', data='扫码支付', img_stream=img_stream)


class Url2Handler(BaseHandler):
  def get(self):
    # 获取链接
    self.render('qrcode.html', title='url', data='URL-提交', img_stream='')

  async def post(self):
    # 生成二维码
    url = self.get_argument('url_str')

    # URL转换二维码
    img_stream = gen_qrcode_obj(url=url)
    # await self.render('qrcode.html', title='qrcode', data='扫码支付', 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-提交', 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):
  """
  方式1: URL转换二维码
  :param url: 转换二维码的URL
  :return: base64编码后的 二进制流 二维码数据
  """
  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):
  """
  方式2: URL转换二维码(图片流传输, template需要指明 data:base64编码)
  :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>
      输入待转换的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="生成二维码">
  </form>
{% end %}

以上就是python-图片流传输的思路及示例(url转换二维码)的详细内容,更多关于python 图片流传输的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python中的yield使用方法
Feb 11 Python
在Django的URLconf中进行函数导入的方法
Jul 18 Python
Python中的集合类型知识讲解
Aug 19 Python
PyQt5每天必学之日历控件QCalendarWidget
Apr 19 Python
pandas表连接 索引上的合并方法
Jun 08 Python
基于Python List的赋值方法
Jun 23 Python
Django继承自带user表并重写的例子
Nov 18 Python
python 上下文管理器及自定义原理解析
Nov 19 Python
基于梯度爆炸的解决方法:clip gradient
Feb 04 Python
如何基于Python按行合并两个txt
Nov 03 Python
Python Django路径配置实现过程解析
Nov 05 Python
Python基础之赋值,浅拷贝,深拷贝的区别
Apr 30 Python
python 用pandas实现数据透视表功能
Dec 21 #Python
python 生成正态分布数据,并绘图和解析
Dec 21 #Python
python statsmodel的使用
Dec 21 #Python
Python 实现集合Set的示例
Dec 21 #Python
Python 实现二叉查找树的示例代码
Dec 21 #Python
如何利用Python matplotlib绘制雷达图
Dec 21 #Python
OpenCV+python实现膨胀和腐蚀的示例
Dec 21 #Python
You might like
php mssql 分页SQL语句优化 持续影响
2009/04/26 PHP
Yii不依赖Model的表单生成器用法实例
2014/12/04 PHP
thinkPHP查询方式小结
2016/01/09 PHP
PHP使用socket发送HTTP请求的方法
2016/02/14 PHP
mysql查找删除重复数据并只保留一条实例详解
2016/09/24 PHP
php cli模式下获取参数的方法
2017/05/05 PHP
图片自动更新(说明)
2006/10/02 Javascript
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
禁用Enter键表单自动提交实现代码
2014/05/22 Javascript
jquery缓动swing liner控制动画过程不同时刻的速度
2014/05/29 Javascript
使用ajaxfileupload.js实现上传文件功能
2016/08/13 Javascript
文件上传的几个示例分享【推荐】
2016/12/16 Javascript
jQuery自定义多选下拉框效果
2017/06/19 jQuery
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
vue2实现数据请求显示loading图
2017/11/28 Javascript
JavaScript生成指定范围随机数和随机序列的方法
2018/05/05 Javascript
Vue组件系列开发之模态框
2019/04/18 Javascript
angularjs模态框的使用代码实例
2019/12/20 Javascript
python通过Windows下远程控制Linux系统
2018/06/20 Python
对Python 3.2 迭代器的next函数实例讲解
2018/10/18 Python
Python实现定制自动化业务流量报表周报功能【XlsxWriter模块】
2019/03/11 Python
python实现广度优先搜索过程解析
2019/10/19 Python
解决ROC曲线画出来只有一个点的问题
2020/02/28 Python
浅谈python量化 双均线策略(金叉死叉)
2020/06/03 Python
pytorch 多分类问题,计算百分比操作
2020/07/09 Python
如何教少儿学习Python编程
2020/07/10 Python
python如何操作mysql
2020/08/17 Python
台湾生鲜宅配:大口市集
2017/10/14 全球购物
班级体育活动总结
2014/07/05 职场文书
5.12护士节活动总结
2015/02/10 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
2015年学校团委工作总结
2015/05/26 职场文书
幼儿园庆元旦主持词
2015/07/06 职场文书
活动宣传稿范文
2015/07/23 职场文书
elasticSearch-api的具体操作步骤讲解
2021/06/28 Java/Android