小编给大家分享一下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/Django后端如何使用PIL Image生成头像缩略图”有了一定的了解,如果想了解更多相关知识,欢迎关注亿速云行业资讯频道,感谢各位的阅读!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。