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检测服务器是否正常
Feb 16 Python
详解Python中的__init__和__new__
Mar 12 Python
Python各类图像库的图片读写方式总结(推荐)
Feb 23 Python
基于Python实现定时自动给微信好友发送天气预报
Oct 25 Python
浅谈python函数调用返回两个或多个变量的方法
Jan 23 Python
Python合并同一个文件夹下所有PDF文件的方法
Mar 11 Python
python异步实现定时任务和周期任务的方法
Jun 29 Python
windows上彻底删除jupyter notebook的实现
Apr 13 Python
pandas中的ExcelWriter和ExcelFile的实现方法
Apr 24 Python
Python虚拟环境库virtualenvwrapper安装及使用
Jun 17 Python
python 实现Requests发送带cookies的请求
Feb 08 Python
python UIAutomator2使用超详细教程
Feb 19 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
2019年中国咖啡业现状与发展趋势
2021/03/04 咖啡文化
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
2011/08/02 PHP
PHP+Mysql+jQuery实现动态展示信息
2011/10/08 PHP
解决FastCGI 进程超过了配置的活动超时时限的问题
2013/07/03 PHP
PHP动态生成javascript文件的2个例子
2014/04/11 PHP
php实现获取及设置用户访问页面语言类
2014/09/24 PHP
Yii全局函数用法示例
2017/01/22 PHP
判断目标是否是window,document,和拥有tagName的Element的代码
2010/05/31 Javascript
获取服务器传来的数据 用JS去空格的正则表达式
2012/03/26 Javascript
不要使用jQuery触发原生事件的方法
2014/03/03 Javascript
javascript实现设置、获取和删除Cookie的方法
2015/06/01 Javascript
javascript文件加载管理简单实现方法
2015/07/25 Javascript
jquery对象和DOM对象的任意相互转换
2016/02/21 Javascript
完美实现八种js焦点轮播图(上篇)
2016/07/18 Javascript
BootStrap+Angularjs+NgDialog实现模式对话框
2016/08/24 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
AngularJS基于provider实现全局变量的读取和赋值方法
2017/06/28 Javascript
如何快速解决JS或Jquery ajax异步跨域的问题
2018/01/08 jQuery
JavaScript类的继承方法小结【组合继承分析】
2018/07/11 Javascript
基于vue的验证码组件的示例代码
2019/01/22 Javascript
JS实现头条新闻的经典轮播图效果示例
2019/01/30 Javascript
详解vue中$nextTick和$forceUpdate的用法
2019/12/11 Javascript
解决Vue中的生命周期beforeDestory不触发的问题
2020/07/21 Javascript
使用Python的Tornado框架实现一个Web端图书展示页面
2016/07/11 Python
python实现上传下载文件功能
2020/11/19 Python
Python中使用遍历在列表中添加字典遇到的坑
2019/02/27 Python
Python可迭代对象操作示例
2019/05/07 Python
python opencv 实现读取、显示、写入图像的方法
2020/06/08 Python
selenium+超级鹰实现模拟登录12306
2021/01/24 Python
recorder.js 基于Html5录音功能的实现
2020/05/26 HTML / CSS
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
应届生船舶驾驶求职信
2013/10/19 职场文书
精彩广告词大全
2014/03/19 职场文书
保险公司晨会主持词
2014/03/22 职场文书
家长意见和建议怎么写
2015/06/04 职场文书
Mysql中mvcc各场景理解应用
2022/08/05 MySQL