如何使用Segno(qrcode python库)即时生成QRCode 显示在网页上 作为SVG数据的示例 导入segno qr = segno.make('跳了魔鬼') svgvar = qr.export_as_svg()
还是更好的主意?
答案 0 :(得分:0)
import segno
# var contains a SVG data URI
var = segno.make('Up Jumped the Devil').svg_data_uri()
var
包含QR码作为数据URI:
data:image/svg+xml;charset=utf-8,%3Csvg%20xmlns[...]
可用于将代码直接嵌入到任何HTML img中。
另一个选择:将SVG写入二进制缓冲区而不是文件中:
import segno
import io
buff = io.BytesIO()
segno.make('Up Jumped the Devil').save(buff, kind="svg")
# Returns the SVG output
buff.getvalue()
buff
包含完整的SVG文档:
<?xml version="1.0" encoding="utf-8"?>
<svg xmlns="http://www.w3.org/2000/svg" width="33" height="33" class="segno"><path[...]</svg>
输出不能直接在HTML页面中使用,但是您可以省略XML声明和SVG名称空间:
segno.make('Up Jumped the Devil').save(buff, kind="svg",
xmldecl=False, svgns=False)
buff.getvalue()
的结果:
<svg width="33" height="33" class="segno"><path[...]</svg>
答案 1 :(得分:0)
我能够在我的 views.py 中执行此操作,以动态生成QR码。
import segno
from django.views.generic.base import TemplateView
from .models import MyModel
class QRCodeView(TemplateView):
template_name = "my_template.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
param = self.kwargs['param'] # this is how to grab something from the url pattern
# scale=10 changes size of saved image
# svg_data_uri (or png_data_uri) is saved in memory and easily put in html <img src='uri'>
# .make_qr forces a non-micro QR code
qr_code = segno.make_qr(f"MY {param} DATA").svg_data_uri(scale=10)
context['qrcode'] = qr_code
return context
现在我可以在我的 template.html
中访问它了<img src="{{ qrcode }}" ...>
与使用缓冲区相比,我更喜欢这样做,因为不需要与Byte / Image进行相互转换,也不需要其他库。