繁体   English   中英

在 Django 模板中显示 PIL 图像对象

[英]display PIL image object in django template

我已经用 PIL 库编辑了用户个人资料照片,并试图在我的 django 模板中显示新图像,但不知何故图像没有显示,这是我在 views.py 中的代码:

enterim = Image.open(get_user_model().objects.get(username=request.user).avatar)
    width, height = im.size 
    newsize = (50, 50) 
    image = im.resize(newsize)
    buffer = BytesIO()
    image.save(buffer, "PNG")
    img_str = buffer.getvalue()
    
return render(request, '../templates/templates_v2/update_location.html', {'updatelocation_form': updatelocation_form,'user_info':user_info,'img_str':img_str}) 

这是 html 模板中的 img 标签:

<img src='data:image/png;"+ {{img_str}} + "'/>

提前致谢

您要做的是修改用户头像的大小,我使用信号从模型中执行此过程。 例子:

from PIL import Image
from django.dispatch import receiver
from django.db.models.signals import post_save

class User(AbstractUser):
    avatar = models.ImageField(default='avatar.png', upload_to='users/')

这个简单的用户模型由什么组成,然后我执行用信号修改图像的过程。

@receiver(post_save, sender=User)
def set_avatar_user(sender, instance, *args, **kwargs):
    if instance.avatar:
        img = Image.open(instance.avatar.path)

        if img.width > 400 and img.height > 400:
            size = (400, 400)
            img.thumbnail(size)
            img.save(instance.avatar.path)

当您保存模型时,图像将修改为您分配的大小,并且要从模板调用图像,它将是 {{ request.user.avatar.url }}

问题是:如何在 django 模板中显示 PIL 图像对象。

所以 :

from io import BytesIO

class html_view(APIView):
    permission_classes = [AllowAny]

    def get(self, request):

        buffer_png = BytesIO()
        qr.save(buffer_png, kind='PNG')



        context = {
            'img_str': base64.b64encode(buffer_png.getvalue()).decode('utf-8'),
        }

        return render(request, 'template.html', context=context)

在 template.html 中:

<img src="data:image/png;base64,{{img_str}}"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM