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查找函数f(x)=0根的解决方法
May 07 Python
Python利用Nagios增加微信报警通知的功能
Feb 18 Python
python实现识别相似图片小结
Feb 22 Python
Python实现统计英文文章词频的方法分析
Jan 28 Python
利用ctypes获取numpy数组的指针方法
Feb 12 Python
Python魔法方法详解
Feb 13 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
Mar 27 Python
Python使用微信itchat接口实现查看自己微信的信息功能详解
Aug 22 Python
Python hashlib加密模块常用方法解析
Dec 18 Python
Python包和模块的分发详细介绍
Jun 19 Python
python利用tkinter实现图片格式转换的示例
Sep 28 Python
Python全局变量与global关键字常见错误解决方案
Oct 05 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 变量定义方法
2009/06/14 PHP
PHP 时间转换Unix时间戳代码
2010/01/22 PHP
Memcached常用命令以及使用说明详解
2013/06/27 PHP
Yii2.0框架模型多表关联查询示例
2019/07/18 PHP
Laravel 实现在Blade模版中使用全局变量代替路径的例子
2019/10/22 PHP
Javascript &amp; DHTML 实例编程(教程)DOM基础和基本API
2007/06/02 Javascript
JavaScript Memoization 让函数也有记忆功能
2011/10/27 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
JQuery中两个ul标签的li互相移动实现方法
2015/05/18 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
JS 调用微信扫一扫功能
2016/12/22 Javascript
javascript基础练习之翻转字符串与回文
2017/02/20 Javascript
Bootstrap响应式导航由768px变成992px的实现代码
2017/06/15 Javascript
Mac 安装 nodejs方法(图文详细步骤)
2017/10/30 NodeJs
快速搭建React的环境步骤详解
2017/11/06 Javascript
原生JS进行前后端同构
2018/04/22 Javascript
JavaScript事件发布/订阅模式原理与用法分析
2018/08/21 Javascript
微信小程序实现swiper切换卡内嵌滚动条不显示的方法示例
2018/12/20 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
python如何解析配置文件并应用到项目中
2019/06/27 Python
使用Python实现图像标记点的坐标输出功能
2019/08/14 Python
如何在 Django 模板中输出 &quot;{{&quot;
2020/01/24 Python
python实现一个简单RPC框架的示例
2020/10/28 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
html5服务器推送_动力节点Java学院整理
2017/07/12 HTML / CSS
英国最大的电脑零售连锁店集团:PC World
2016/10/10 全球购物
不假外出检讨书
2014/01/27 职场文书
行政专员岗位职责说明书
2014/09/01 职场文书
民事和解协议书格式
2014/11/29 职场文书
撤诉书怎么写
2015/05/19 职场文书
python基础之匿名函数详解
2021/04/21 Python
阿里云ECS云服务器快照的概念以及如何使用
2022/04/21 Servers
代码复现python目标检测yolo3详解预测
2022/05/06 Python
netty 实现tomcat的示例代码
2022/06/05 Servers