如何在Python中创建二维码而不将其另存为图像?

问题描述 投票:0回答:4

我正在尝试使用以下代码在 Django 应用程序上使用 Python 制作二维码:

def generate_qr_code (reference):
    qr = qrcode.QRCode(
    version=1,
    error_correction=qrcode.constants.ERROR_CORRECT_H,
    box_size=10,
    border=4,
    )
    qr.add_data(reference)
    qr.make(fit=True)
    img = qr.make_image(fill_color="black", back_color="white").convert('RGB')
    filename = reference+".jpeg"
    img.save("C:\\qrs\\"+filename)

现在,当我单击“生成二维码”按钮时,就会调用此函数。我的问题是,我希望二维码显示在浏览器的新选项卡上,而不是将其保存为图像,因为当时我只需要将它们打印在纸上,不需要保留图像.

谢谢您的帮助。

python django django-templates qr-code django-apps
4个回答
5
投票

将图像转换为 Base64 并在 html 中显示它像这样

import base64
b64 = base64.b64encode(image).decode("utf-8")

更新:

ofc 你不需要将图像保存为 png 来使用此功能,你可以在 html 中更改格式,也可以更改图像格式而不将其保存到文件像这样


1
投票

您可以使用SVG格式 导入二维码 导入 qrcode.image.svg 从 io 导入 BytesIO

def generate_qr_code (reference):
  factory = qrcode.image.svg.SvgImage
  qr_string = "sample text"
  img = qrcode.make(qr_string, image_factory=factory, box_size=10)
  stream = BytesIO()
  img.save(stream)
  
  context = {
   'qrcode': stream.getvalue().decode()
  }

  return render(request, 'YOUR HTML.html', context)

然后你可以在html文件中使用它:

{{qrcode|safe}}

0
投票

毕竟,我通过在 HTML 中使用这个简单的行来做到这一点:

<img id='barcode' src="https://api.qrserver.com/v1/create-qr-code/?data={{ref}}" alt="" title="{{ref}}" width="150" height="150"/>

0
投票

您可以通过单击 Django 模板中的链接并使用以下代码来创建并在新选项卡中显示二维码:

# "my_app1/views.py"

from django.shortcuts import render
import qrcode
from io import BytesIO
from base64 import b64encode

def index(request):
    return render(request, 'index.html') 

def generate_qr_code(request):
    qr_code_img = qrcode.make("https://www.google.com/")
    buffer = BytesIO()
    qr_code_img.save(buffer)
    buffer.seek(0)
    encoded_img = b64encode(buffer.read()).decode()
    qr_code_data = f'data:image/png;base64,{encoded_img}'
    return render(request, 'qr_code.html', {'qr_code_data': qr_code_data})
# "my_app1/urls.py"

from django.urls import path
from . import views

app_name = "my_app1"

urlpatterns = [
    path('', views.index, name="index"),
    path('generate_qr_code/', views.generate_qr_code, name="generate-qr-code")
]
# "core/urls.py"

from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('my_app1/', include('my_app1.urls'))
]
{% "templates/index.html" %}

<a href="{% url 'my_app1:generate-qr-code' %}" target="_blank">
  Generate Qr Code
</a>
{% "templates/qr_code.html" %}

<img src="{{ qr_code_data }}" />
© www.soinside.com 2019 - 2024. All rights reserved.