如何在Django视图中显示PIL图像对象?

时间:2014-08-11 10:19:09

标签: django image view python-imaging-library

我在github上使用a library来自己生成qrcode而不是使用api,但我很难理解如何渲染PIL图像对象(这是默认的图像渲染器)。 到目前为止,我有这个:

import qrcode
from qrcode.image.pure import PymagingImage
img = qrcode.make('Some data here', image_factory=PymagingImage)

但是当我在主页面视图中将其显示为图像时,我感到困惑。

提前感谢您的任何帮助:)

编辑: 如果可能的话,也非常感谢对html语法的一些澄清:

<div class="row">
    <div class="col-xs-12">
        <img src="{% static "some.jpg" %}" alt="somename" class="img-responsive"/>
    </div>
</div>

谢谢:)

2 个答案:

答案 0 :(得分:6)

生成QR码后,您需要将其作为响应时的图像返回。 在我的一个项目中,我使用这个库。 我在这里:

def generate_qr_code(data, size=10, border=0):
    qr = qrcode.QRCode(version=1, error_correction=qrcode.constants.ERROR_CORRECT_L,
                       box_size=size, border=border)
    qr.add_data(data)
    qr.make(fit=True)
    return qr.make_image()

观点:

@render_to()
def return_qr(request):
    text = request.GET.get('text')
    qr = generate_qr_code(text, 10, 2)
    response = HttpResponse(mimetype="image/png")
    qr.save(response, "PNG")
    return response

然后您可以将文本传递给视图,图像将返回结果。


<强> UPD:

我有一个模板标签,可以在我的模板中显示qr。

@register.inclusion_tag('qrcode/qr_tag.html', takes_context=True)
def get_qrcode_image(context, text, size):
    url = reverse('generate_qr')
    return {'url': url, 'text': text, 'size': size}

模板'qrcode/qr_tag.html'

<img src="{{url}}?size={{size}}&text={{text}}" />

所以在结果中你可以用这种方式包含你的QR码:

<div class="row">
    <div class="col-xs-12">
        {% get_qrcode_image 'some text to decode' 320 %}
    </div>
</div>

答案 1 :(得分:0)

问题的标题和答案相互之间不太匹配,因为它们既未提及PIL,也未引用其他库。仅在搜索有关在Django视图中显示PIL生成的图像的示例时,这个问题就坚持要首先列出。

这是一个更新的答案,可以回答原始问题。

from django.http import HttpResponse
from PIL import Image

def my_view(request):

    image = Image.new('RGB', (128,128), 'green')

    response = HttpResponse(content_type='image/jpeg')

    image.save(response, "JPEG")

    return response