当前位置: 首页 > 编程笔记 >

Python/Django后端使用PIL Image生成头像缩略图

路金鑫
2023-03-14
本文向大家介绍Python/Django后端使用PIL Image生成头像缩略图,包括了Python/Django后端使用PIL Image生成头像缩略图的使用技巧和注意事项,需要的朋友参考一下

本文实例为大家分享了Python/Django后端使用PIL Image生成头像缩略图的具体代码,供大家参考,具体内容如下

import os
from django.views.generic import View
from myapp.models import User
from PIL import Image

def make_thumbnail(infile,thumbnail_dir):
 size = (156, 156)
 if not os.path.exists(thumbnail_dir):#判断缩略图存储目录是否存在then新建
 os.mkdir(thumbnail_dir)
 outfile = os.path.join( thumbnail_dir, os.path.basename(infile))
 try:
 im = Image.open(infile)#Key Point
 im.thumbnail(size)#Key Point
 im.save(outfile, "JPEG")#Key Point
 return True
 except IOError, err:
 print("cannot create thumbnail for", infile,err)
 return False

class Useravatar(View):
 def __init__(self):
 self.thumbnail_dir = os.path.join(STATIC_ROOT, 'avatar/thumbnails')
 self.dest_dir = os.path.join(STATIC_ROOT, 'avatar/origin_imgs')

 @method_decorator(login_required)
 def post(self, request):
 nt_id = request.session.get('nt_id', 'default')
 user = User.objects.get(pk=nt_id) if User.objects.filter(pk=nt_id).exists() else None
 avatarImg = request.FILES['avatar']
 if not os.path.exists(self.dest_dir):#判断原图存储目录是否存在then新建
  os.mkdir(self.dest_dir)
 dest = os.path.join(self.dest_dir, nt_id+"_avatar.jpg")
 with open(dest, "wb+") as destination:#先保存原图
  for chunk in avatarImg.chunks():
  destination.write(chunk)
 if make_thumb(dest,self.thumbnail_dir):#使用原图创建缩略图
  avartaPath = os.path.join(STATIC_URL, 'avatar/thumbnails', nt_id + "_avatar.jpg")
 else:
  avartaPath = os.path.join(STATIC_URL, 'avatar/origin_imgs', nt_id + "_avatar.jpg")

 User.objects.filter(nt_id=nt_id).update(avatar=avartaPath)
 return render(request, 'profile.html', {'user': user})

示例代码中将制作缩略图的函数从基于类的视图中分离出来了(为了清晰起见),实际编程过程中可以定义为类方法方面调用

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 问题内容: 我正在用Python建立照片库,希望能够快速为高分辨率图像生成缩略图。 为各种图像源生成高质量缩略图的最快方法是什么? 我应该使用像imagemagick这样的外部库,还是有一种有效的内部方法来做到这一点? 调整大小后的图像的尺寸为(最大尺寸): 质量是一个问题,因为我想保留尽可能多的原始颜色并最大程度地减少压缩伪影。 谢谢。 问题答案: 您想要PIL轻松做到这一点 如果您迫切需要速度

  • 本文向大家介绍使用ThinkPHP生成缩略图及显示,包括了使用ThinkPHP生成缩略图及显示的使用技巧和注意事项,需要的朋友参考一下 使用ThinkPHP生成缩略图及显示,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 首先了解父类Image.class.php(ThinkPHP/Library/Think/Image.class.php)中的一些函数 1:open() 打开被处理的图片 2:

  • 我以前从未使用过ffmpeg,但它看起来相当直接。我已经有一个脚本来处理上传的文件并将所有相关数据存储到数据库中,但是我不能生成缩略图。我也没有出错,我甚至检查了服务器上的error_log,什么都没有。我尝试使用的命令是: 我会改变静态文件名的变量,一旦我得到它的工作,因为视频将被缩略图上传通过一个表单。 我尝试使用这个页面的解决方案: ffmpeg从视频中获取图像或缩略图错误 但是我没有任何运

  • 我的Wordpress站点显示所有的帖子,堆叠在文章中,使用行(Bootstrap 3)跨越index.php的整个宽度。 index.php-HTML php显示每篇文章中的文章(文章堆叠在一起,全宽,向下) 我有标题和类别显示在每一行正确。我希望每个帖子的帖子缩略图(我在functions.php中添加了它的用法)成为每一行的背景图像。填充整个空间(背景尺寸:封面) 基本上很大,100%宽

  • 问题内容: 如何在Django中提供动态生成的图像? 我有一个html标签 链接到此请求处理程序,该请求处理程序创建一个内存中图像 我还计划将请求更改为AJAX,并添加某种缓存机制,但是我的理解是,这不会影响解决方案的这一部分。 问题答案: 我假设您正在使用PIL(Python影像库)。您需要用(例如,如果要提供PNG图像)替换最后一行: 有关更多信息,请参见此处。

  • 本文向大家介绍使用PHP生成图片的缩略图的方法,包括了使用PHP生成图片的缩略图的方法的使用技巧和注意事项,需要的朋友参考一下  功能:支持jpg,jpeg,gif,png,bmp图片格式,支持按原图片的比例进行缩放,可以选择在图片缩放的过程中是否需要对图片进行裁切,加入了图片质量控制,可以实现缩略图片质量最高化。完整类的代码如下:   使用方法很简单代码如下:   另外一个强大的PHP图片缩略图