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中命名空间的查找规则LEGB
Aug 06 Python
使用python绘制常用的图表
Aug 27 Python
Python提取网页中超链接的方法
Sep 18 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
Python3学习笔记之列表方法示例详解
Oct 06 Python
python实现爬取图书封面
Jul 05 Python
Python Image模块基本图像处理操作小结
Apr 13 Python
Python Tkinter 简单登录界面的实现
Jun 14 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
Aug 20 Python
使用python-cv2实现视频的分解与合成的示例代码
Oct 26 Python
python绘制雷达图实例讲解
Jan 03 Python
python使用matplotlib绘制图片时x轴的刻度处理
Aug 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中常见的sql攻击正则表达式汇总
2014/11/06 PHP
JavaScript入门学习书籍推荐
2008/06/12 Javascript
JavaScript DOM 添加事件
2009/02/14 Javascript
JQuery获取文本框中字符长度的代码
2011/09/29 Javascript
在页面中js获取光标/鼠标的坐标及光标的像素坐标
2013/11/11 Javascript
js监听滚动条滚动事件使得某个标签内容始终位于同一位置
2014/01/24 Javascript
javascript实现捕捉键盘上按下的键
2015/05/05 Javascript
javascript实现获取字符串hash值
2015/05/10 Javascript
Jquery动态添加输入框的方法
2015/05/29 Javascript
移动手机APP手指滑动切换图片特效附源码下载
2015/11/30 Javascript
Vue cli+mui 区域滚动的实例代码
2018/01/25 Javascript
Element UI框架中巧用树选择器的实现
2018/12/12 Javascript
Vue 使用beforeEach实现登录状态检查功能
2019/10/31 Javascript
node.JS二进制操作模块buffer对象使用方法详解
2020/02/06 Javascript
javascrpt密码强度校验函数详解
2020/03/18 Javascript
JavaScript日期库date-fn.js使用方法解析
2020/09/09 Javascript
vue实现广告栏上下滚动效果
2020/11/26 Vue.js
Django集成百度富文本编辑器uEditor攻略
2014/07/04 Python
跟老齐学Python之Python安装
2014/09/12 Python
Python增量循环删除MySQL表数据的方法
2016/09/23 Python
python条件变量之生产者与消费者操作实例分析
2017/03/22 Python
由浅入深讲解python中的yield与generator
2017/04/05 Python
django rest framework之请求与响应(详解)
2017/11/06 Python
解决sublime+python3无法输出中文的问题
2018/12/12 Python
python time.sleep()是睡眠线程还是进程
2019/07/09 Python
深入解析神经网络从原理到实现
2019/07/26 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
python matplotlib库直方图绘制详解
2019/08/10 Python
Python Matplotlib绘图基础知识代码解析
2020/08/31 Python
Python request post上传文件常见要点
2020/11/20 Python
企业精细化管理实施方案
2014/03/23 职场文书
语文教研活动总结
2014/07/02 职场文书
诚实守信道德模范事迹材料
2014/08/15 职场文书
自我评价优缺点范文
2015/03/11 职场文书
蜗居观后感
2015/06/11 职场文书
导游词之西安骊山
2019/12/20 职场文书