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抓取百度首页的方法
May 19 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
Jun 28 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
Jun 05 Python
python 用lambda函数替换for循环的方法
Jun 09 Python
pytorch 数据集图片显示方法
Jul 26 Python
Python抽象和自定义类定义与用法示例
Aug 23 Python
transform python环境快速配置方法
Sep 27 Python
对python读写文件去重、RE、set的使用详解
Dec 11 Python
pytorch 自定义数据集加载方法
Aug 18 Python
解决Python对齐文本字符串问题
Aug 28 Python
Python使用docx模块实现刷题功能代码
Feb 13 Python
关于python的缩进规则的知识点详解
Jun 22 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中的路径问题与set_include_path使用介绍
2014/02/11 PHP
合并ThinkPHP配置文件以消除代码冗余的实现方法
2014/07/22 PHP
通过jquery实现tab标签浏览效果
2007/02/20 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
JavaScript保留两位小数的2个自定义函数
2014/05/05 Javascript
node.js中的events.emitter.removeAllListeners方法使用说明
2014/12/10 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
webpack处理 css\less\sass 样式的方法
2017/08/21 Javascript
vue自定义指令directive实例详解
2018/01/17 Javascript
3分钟了解vue数据劫持的原理实现
2019/05/01 Javascript
Vue+Django项目部署详解
2019/05/30 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
JS实现图片切换特效
2019/12/23 Javascript
Vue实现boradcast和dispatch的示例
2020/11/13 Javascript
python中的hashlib和base64加密模块使用实例
2014/09/02 Python
python类和函数中使用静态变量的方法
2015/05/09 Python
Python黑帽编程 3.4 跨越VLAN详解
2016/09/28 Python
JSONLINT:python的json数据验证库实例解析
2017/11/28 Python
Python笔试面试题小结
2019/09/07 Python
python中图像通道分离与合并实例
2020/01/17 Python
python按顺序重命名文件并分类转移到各个文件夹中的实现代码
2020/07/21 Python
基于python爬取梨视频实现过程解析
2020/11/09 Python
初探CSS3中的calc()功能
2015/07/14 HTML / CSS
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
应届大学生求职的自我评价
2013/11/17 职场文书
测试工程师岗位职责
2013/11/28 职场文书
创业计划书六个要素
2013/12/26 职场文书
预备党员政审材料
2014/02/04 职场文书
献爱心标语
2014/06/21 职场文书
营业员岗位职责范本
2015/04/14 职场文书
中学总务处工作总结
2015/08/12 职场文书
2016年秋季运动会加油稿
2015/12/21 职场文书
pycharm debug 断点调试心得分享
2021/04/16 Python
Golang 使用Map实现去重与set的功能操作
2021/04/29 Golang
分位数回归模型quantile regeression应用详解及示例教程
2021/11/02 Python
Redis调用Lua脚本及使用场景快速掌握
2022/03/16 Redis