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

Posted

技术标签:

【中文标题】如何在 Django 视图中显示 PIL 图像对象?【英文标题】:How to display a PIL image object in Django view? 【发布时间】:2014-08-11 10:19:08 【问题描述】:

我在 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" %"  class="img-responsive"/>
    </div>
</div>

谢谢:)

【问题讨论】:

【参考方案1】:

生成二维码后,您需要将其作为图像返回。 在我的一个项目中,我使用了这个库。 我有:

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" />

因此,您可以通过这种方式包含您的二维码:

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

【讨论】:

感谢您的帮助,如果可能的话,请您帮助我了解如何将其放入 html 中?我也修改了上面的问题:) 如果你还在,你能澄清一下@render_to() 装饰器的作用吗?我没有看到它在其他任何地方被引用。或者你的意思是让我用我正在使用的视图的名称替换它?再次感谢:) 它是来自 django-annoying 的装饰器,但是由于您手动返回响应,因此您不需要@render_to【参考方案2】:

问题的标题和答案彼此不匹配,因为两者都没有提及 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

【讨论】:

以上是关于如何在 Django 视图中显示 PIL 图像对象?的主要内容,如果未能解决你的问题,请参考以下文章

提交带有表格的图像时需要Django Pillow或Pil吗?

如何在 ipython 笔记本中显示 PIL 图像

如何在屏幕上显示 PIL 图像?

无法在模板上呈现 PIL 对象 base64 图像

如何将 PIL 图像转换为 numpy 数组?

Django / PIL - 上传图像时保存缩略图版本