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中pygame模块用法实例
Oct 09 Python
搞笑的程序猿:看看你是哪种Python程序员
Jun 12 Python
Python实现截屏的函数
Jul 26 Python
浅谈Python的垃圾回收机制
Dec 17 Python
python实现输入数字的连续加减方法
Jun 22 Python
python变量赋值方法(可变与不可变)
Jan 12 Python
python关于矩阵重复赋值覆盖问题的解决方法
Jul 19 Python
详解使用PyInstaller将Pygame库编写的小游戏程序打包为exe文件
Aug 23 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
Python reshape的用法及多个二维数组合并为三维数组的实例
Feb 07 Python
安装并免费使用Pycharm专业版(学生/教师)
Sep 24 Python
Django实现drf搜索过滤和排序过滤
Jun 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
一个PHP的String类代码
2010/04/20 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
PHP PDOStatement::columnCount讲解
2019/01/30 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
laravel Model 执行事务的实现
2019/10/10 PHP
js 小数取整的函数
2010/05/10 Javascript
全面理解面向对象的 JavaScript(来自ibm)
2013/11/10 Javascript
js使用数组判断提交数据是否存在相同数据
2013/11/27 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
js中的json对象详细介绍
2014/10/29 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
JS html时钟制作代码分享
2017/03/03 Javascript
Vue2 SSR渲染根据不同页面修改 meta
2017/11/20 Javascript
js实现以最简单的方式将数组元素添加到对象中的方法
2017/12/20 Javascript
python实现保存网页到本地示例
2014/03/16 Python
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
Python基于matplotlib绘制栈式直方图的方法示例
2017/08/09 Python
python查看模块安装位置的方法
2018/10/16 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
python实现彩色图转换成灰度图
2019/01/15 Python
Python魔法方法功能与用法简介
2019/04/04 Python
python+selenium 点击单选框-radio的实现方法
2019/09/03 Python
django ajax发送post请求的两种方法
2020/01/05 Python
Python 时间戳之获取整点凌晨时间戳的操作方法
2020/01/28 Python
Pandas的Apply函数具体使用
2020/07/21 Python
css3.0新属性效果在ie下的解决方案
2010/05/10 HTML / CSS
万宝龙英国官网:Montblanc手表、书写工具、皮革和珠宝
2018/10/16 全球购物
Laura官网:加拿大女性的顶级时尚目的地
2019/09/20 全球购物
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
Ibatis如何调用存储过程
2015/05/15 面试题
大学学年自我鉴定
2013/10/28 职场文书
优秀教师的感人事迹
2014/02/04 职场文书
产品发布会策划方案
2014/05/12 职场文书
转让协议书范本
2014/09/13 职场文书
CSS3 制作的书本翻页特效
2021/04/13 HTML / CSS