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中的赋值和深浅拷贝
Aug 15 Python
Python之自动获取公网IP的实例讲解
Oct 01 Python
Python常见字符串操作函数小结【split()、join()、strip()】
Feb 02 Python
python requests爬取高德地图数据的实例
Nov 10 Python
python实现归并排序算法
Nov 22 Python
解决Python selenium get页面很慢时的问题
Jan 30 Python
Python实现判断一个整数是否为回文数算法示例
Mar 02 Python
Django框架使用内置方法实现登录功能详解
Jun 12 Python
python绘制直方图和密度图的实例
Jul 08 Python
Python函数参数定义及传递方式解析
Jun 10 Python
python读取图像矩阵文件并转换为向量实例
Jun 18 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
Jan 27 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
高分R级DC动画剧《哈莉·奎茵》第二季正式预告首发
2020/04/09 欧美动漫
php查看session内容的函数
2008/08/27 PHP
PHP 多维数组排序(usort,uasort)
2010/06/30 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
Zend Framework教程之Zend_Db_Table用法详解
2016/03/21 PHP
fix-ie5.js扩展在IE5下不能使用的几个方法
2007/08/20 Javascript
基于jquery的仿百度的鼠标移入图片抖动效果
2010/09/17 Javascript
javascript面向对象入门基础详细介绍
2012/09/05 Javascript
JS去掉第一个字符和最后一个字符的实现代码
2014/02/20 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
javascript学习总结之js使用技巧
2015/09/02 Javascript
jQuery控制frames及frame页面JS的方法
2016/03/08 Javascript
Javascript中数组去重与拍平的方法示例
2017/02/03 Javascript
AngularJs 常用的过滤器
2017/05/15 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
Vue递归实现树形菜单方法实例
2018/11/06 Javascript
详解CommonJS和ES6模块循环加载处理的区别
2018/12/26 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
layui导出所有数据的例子
2019/09/10 Javascript
NodeJS http模块用法示例【创建web服务器/客户端】
2019/11/05 NodeJs
Vue打包后访问静态资源路径问题
2019/11/08 Javascript
vue中实现点击变成全屏的多种方法
2020/09/27 Javascript
[02:32]DOTA2完美大师赛场馆静安体育中心观赛全攻略
2017/11/08 DOTA
[02:52]2017DOTA2国际邀请赛中国区预选赛晋级之路
2017/07/03 DOTA
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
Python 3中的yield from语法详解
2017/01/18 Python
python 3.5下xadmin的使用及修复源码bug
2017/05/10 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
CSS3——齿轮转动关键代码
2013/05/02 HTML / CSS
希腊品牌鞋类销售网站:epapoutsia.gr
2020/03/18 全球购物
企业业务员岗位职责
2014/03/14 职场文书
社区领导班子四风问题原因分析及整改措施
2014/09/28 职场文书
2014年管理工作总结
2014/11/22 职场文书
郭明义观后感
2015/06/08 职场文书
2015年中学体育教师工作总结
2015/10/23 职场文书
Java完整实现记事本代码
2022/06/16 Java/Android