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 相关文章推荐
在Django的上下文中设置变量的方法
Jul 20 Python
Python中list列表的一些进阶使用方法介绍
Aug 15 Python
八大排序算法的Python实现
Jan 28 Python
python入门基础之用户输入与模块初认识
Nov 14 Python
python 对dataframe下面的值进行大规模赋值方法
Jun 09 Python
Python爬虫包BeautifulSoup异常处理(二)
Jun 17 Python
Opencv-Python图像透视变换cv2.warpPerspective的示例
Apr 11 Python
python基于Selenium的web自动化框架
Jul 14 Python
Django CSRF认证的几种解决方案
Mar 03 Python
Python趣味挑战之教你用pygame画进度条
May 31 Python
Python实现信息轰炸工具(再也不怕说不过别人了)
Jun 11 Python
python数字类型和占位符详情
Mar 13 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中的正规表达式(二)
2006/10/09 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
PHP实现批量修改文件名的方法示例
2019/09/18 PHP
JavaScript的document对象和window对象详解
2010/12/30 Javascript
一个关于javascript匿名函数的问题分析
2012/03/30 Javascript
简单常用的幻灯片播放实现代码
2013/09/25 Javascript
利用NodeJS和PhantomJS抓取网站页面信息以及网站截图
2013/11/18 NodeJs
jquery实现表格本地排序的方法
2015/03/11 Javascript
JavaScript中Window对象的属性及事件
2015/12/25 Javascript
jQuery继承extend用法详解
2016/10/10 Javascript
jQuery使用EasyUi实现三级联动下拉框效果
2017/03/08 Javascript
Express进阶之log4js实用入门指南
2018/02/10 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
JavaScript如何判断对象有某属性
2020/07/03 Javascript
vue-drawer-layout实现手势滑出菜单栏
2020/11/19 Vue.js
Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)
2008/09/06 Python
Python的Bottle框架的一些使用技巧介绍
2015/04/08 Python
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
Python实现查找系统盘中需要找的字符
2015/07/14 Python
浅谈Python中列表生成式和生成器的区别
2015/08/03 Python
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2017/03/11 Python
轻量级的Web框架Flask 中模块化应用的实现
2017/09/11 Python
http请求 request失败自动重新尝试代码示例
2018/01/25 Python
python3实现绘制二维点图
2019/12/04 Python
python爬虫基础知识点整理
2020/06/02 Python
Python3安装模块报错Microsoft Visual C++ 14.0 is required的解决方法
2020/07/28 Python
Pytorch 中的optimizer使用说明
2021/03/03 Python
Puma印度官网:德国运动品牌
2019/10/06 全球购物
学前教育求职自荐信范文
2013/12/25 职场文书
自考生自我评价分享
2014/01/18 职场文书
公司的门卫岗位职责
2014/09/09 职场文书
2014大四本科生自我鉴定总结
2014/10/04 职场文书
党政领导班子群众路线对照检查材料
2014/10/26 职场文书
2016年党员学习廉政准则心得体会
2016/01/20 职场文书
Python selenium绕过webdriver监测执行javascript
2022/04/12 Python