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 22 Python
python基础教程之自定义函数介绍
Aug 29 Python
使用beaker让Facebook的Bottle框架支持session功能
Apr 23 Python
你眼中的Python大牛 应该都有这份书单
Oct 31 Python
django rest framework 数据的查找、过滤、排序的示例
Jun 25 Python
pyQt4实现俄罗斯方块游戏
Jun 26 Python
tensorflow更改变量的值实例
Jul 30 Python
利用Python如何实现一个小说网站雏形
Nov 23 Python
在Python中字典根据多项规则排序的方法
Jan 21 Python
django使用haystack调用Elasticsearch实现索引搜索
Jul 24 Python
python+Django实现防止SQL注入的办法
Oct 31 Python
Django实现celery定时任务过程解析
Apr 21 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
定制404错误页面,并发信给管理员的程序
2006/10/09 PHP
smarty模板嵌套之include与fetch性能测试
2010/12/05 PHP
用Php编写注册后Email激活验证的实例代码
2013/03/11 PHP
PHP安全下载文件的方法
2016/04/07 PHP
php实时倒计时功能实现方法详解
2017/02/27 PHP
php实现微信模板消息推送
2018/03/30 PHP
PHP如何使用JWT做Api接口身份认证的实现
2020/02/03 PHP
javascript 图片裁剪技巧解读
2012/11/15 Javascript
JavaScript实现网页上的浮动广告的简单方法
2013/06/14 Javascript
jQuery动画效果-slideUp slideDown上下滑动示例代码
2013/08/28 Javascript
基于JavaScript实现移动端TAB触屏切换效果
2015/10/20 Javascript
JS中Select下拉列表类(支持输入模糊查询)功能
2017/01/17 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
Array数组对象中的forEach、map、filter及reduce详析
2018/08/02 Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
2018/11/05 Javascript
JavaScript模块管理的简单实现方式详解
2019/06/15 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
jquery实现进度条状态展示
2020/03/26 jQuery
echarts实现晶体球面投影的实例教程
2020/10/10 Javascript
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
[42:32]完美世界DOTA2联赛PWL S2 LBZS vs FTD.C 第二场 11.27
2020/12/01 DOTA
从零学python系列之从文件读取和保存数据
2014/05/23 Python
Python中正则表达式的用法实例汇总
2014/08/18 Python
浅谈pandas用groupby后对层级索引levels的处理方法
2018/11/06 Python
Django 迁移、操作数据库的方法
2019/08/02 Python
使用IDLE的Python shell窗口实例详解
2019/11/19 Python
tensorflow实现二维平面模拟三维数据教程
2020/02/11 Python
Python HTMLTestRunner库安装过程解析
2020/05/25 Python
工作交流会欢迎词
2014/01/12 职场文书
保护环境倡议书500字
2014/05/19 职场文书
学校教师读书活动总结
2014/07/08 职场文书
单位授权委托书范文
2014/08/02 职场文书
房屋转让协议书
2014/10/18 职场文书
2014年企业团支部工作总结
2014/12/10 职场文书
毕业生爱心捐书倡议书
2015/04/27 职场文书
element多个表单校验的实现
2021/05/27 Javascript