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


Posted in Python onApril 30, 2019

本文实例为大家分享了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 相关文章推荐
Python中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
python学习之面向对象【入门初级篇】
Jan 21 Python
Python排序搜索基本算法之堆排序实例详解
Dec 08 Python
pandas的object对象转时间对象的方法
Apr 11 Python
win10系统下Anaconda3安装配置方法图文教程
Sep 19 Python
python中使用zip函数出现错误的原因
Sep 28 Python
在pytorch中查看可训练参数的例子
Aug 18 Python
关于numpy中eye和identity的区别详解
Nov 29 Python
python 操作hive pyhs2方式
Dec 21 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
Mar 02 Python
Django QuerySet查询集原理及代码实例
Jun 13 Python
利用django创建一个简易的博客网站的示例
Sep 29 Python
Python3.5迭代器与生成器用法实例分析
Apr 30 #Python
python使用Paramiko模块实现远程文件拷贝
Apr 30 #Python
Django学习笔记之为Model添加Action
Apr 30 #Python
Python Opencv实现图像轮廓识别功能
Mar 23 #Python
python opencv实现图像边缘检测
Apr 29 #Python
Python Django给admin添加Action的方法实例详解
Apr 29 #Python
python实现微信机器人: 登录微信、消息接收、自动回复功能
Apr 29 #Python
You might like
利用php来自动调用不同服务器上的flash
2006/10/09 PHP
php对文件夹进行相关操作(遍历、计算大小)
2015/11/04 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
Prototype最新版(1.5 rc2)使用指南(1)
2007/01/10 Javascript
js的逻辑运算符 ||
2010/05/31 Javascript
通过Javascript创建一个选择文件的对话框代码
2012/06/16 Javascript
JS获取几种URL地址的方法小结
2014/02/26 Javascript
jQuery将多条数据插入模态框的示例代码
2014/09/25 Javascript
使用jQuery实现input数值增量和减量的方法
2015/01/24 Javascript
Web前端开发之水印、图片验证码
2016/11/27 Javascript
windows下vue-cli导入bootstrap样式
2017/04/25 Javascript
jQuery实现动态删除LI的方法
2017/05/30 jQuery
JavaScript满天星导航栏实现方法
2018/03/08 Javascript
node thread.sleep实现示例
2018/06/20 Javascript
Typescript的三种运行方式(小结)
2019/09/18 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
vue实现购物车的监听
2020/04/20 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
[54:57]DOTA2-DPC中国联赛定级赛 Aster vs DLG BO3第二场 1月8日
2021/03/11 DOTA
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
python的keyword模块用法实例分析
2015/06/30 Python
实例分析python3实现并发访问水平切分表
2018/09/29 Python
Python获取航线信息并且制作成图的讲解
2019/01/03 Python
python opencv把一张图片嵌入(叠加)到另一张图片上的实现代码
2020/06/11 Python
Python不支持 i ++ 语法的原因解析
2020/07/22 Python
Python 如何在字符串中插入变量
2020/08/01 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
一款纯css3制作的2015年元旦雪人动画特效教程
2014/12/29 HTML / CSS
千元咖啡店的创业计划书范文
2013/12/29 职场文书
教学实验楼管理制度
2014/02/01 职场文书
农村门前三包责任书
2014/07/25 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
“向国旗敬礼”主题班会活动设计方案
2014/09/27 职场文书
2015年国培研修感言
2015/08/01 职场文书
信息技术课教学反思
2016/02/23 职场文书