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 随机生成中文验证码的实例代码
Mar 20 Python
各个系统下的Python解释器相关安装方法
Oct 12 Python
Python性能提升之延迟初始化
Dec 04 Python
Python爬虫_城市公交、地铁站点和线路数据采集实例
Jan 10 Python
python实现树形打印目录结构
Mar 29 Python
在Windows中设置Python环境变量的实例讲解
Apr 28 Python
详解将Django部署到Centos7全攻略
Sep 26 Python
基于Python对数据shape的常见操作详解
Dec 25 Python
python 中如何获取列表的索引
Jul 02 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
Feb 26 Python
Pytest框架之fixture的详细使用教程
Apr 07 Python
python ansible自动化运维工具执行流程
Jun 24 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令牌 Token改进版
2008/07/18 PHP
php读取html并截取字符串的简单代码
2009/11/30 PHP
php中如何防止表单的重复提交
2013/08/02 PHP
php中执行系统命令的方法
2015/03/21 PHP
浅析PHP中call user func()函数及如何使用call user func调用自定义函数
2015/11/05 PHP
PHP实现财务审核通过后返现金额到客户的功能
2019/07/04 PHP
IE和Firefox下event事件杂谈
2009/12/18 Javascript
javascript options属性集合操作代码
2009/12/28 Javascript
js实现快速分享功能(你的文章分享工具)
2013/06/25 Javascript
使用js解决由border属性引起的div宽度问题
2013/11/26 Javascript
如何判断元素是否为HTMLElement元素
2013/12/06 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
CKEditor无法验证的解决方案(js验证+jQuery Validate验证)
2016/05/09 Javascript
简单谈谈JS数组中的indexOf方法
2016/10/13 Javascript
微信小程序 教程之小程序配置
2016/10/17 Javascript
微信小程序 POST请求(网络请求)详解及实例代码
2016/11/16 Javascript
js实现表格筛选功能
2017/01/18 Javascript
JS控件bootstrap suggest plugin使用方法详解
2017/03/25 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
2018/06/26 Javascript
JavaScript查看代码运行效率console.time()与console.timeEnd()用法
2019/01/18 Javascript
Vue中消息横向滚动时setInterval清不掉的问题及解决方法
2019/08/23 Javascript
浅谈layui使用模板引擎动态渲染元素要注意的问题
2019/09/14 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
详解Python2.x中对Unicode编码的使用
2015/04/03 Python
python修改操作系统时间的方法
2015/05/18 Python
详解Django缓存处理中Vary头部的使用
2015/07/24 Python
Flask数据库迁移简单介绍
2017/10/24 Python
python orm 框架中sqlalchemy用法实例详解
2020/02/02 Python
django在保存图像的同时压缩图像示例代码详解
2020/02/11 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
python 基于opencv实现图像增强
2020/12/23 Python
幼儿教师个人求职信范文
2013/09/21 职场文书
实习生个人找工作的自我评价
2013/10/30 职场文书
电钳专业个人求职信
2014/01/04 职场文书
铁路安全事故反思
2014/04/26 职场文书
保护环境的宣传语
2015/07/13 职场文书