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中的sort方法使用详解
Jul 25 Python
Python实现把回车符\r\n转换成\n
Apr 23 Python
python+pyqt实现右下角弹出框
Oct 26 Python
使用Python进行AES加密和解密的示例代码
Feb 02 Python
基于Django用户认证系统详解
Feb 21 Python
python中协程实现TCP连接的实例分析
Oct 14 Python
python使用Turtle库绘制动态钟表
Nov 19 Python
django 外键model的互相读取方法
Dec 15 Python
python过滤中英文标点符号的实例代码
Jul 15 Python
python获取指定日期范围内的每一天,每个月,每季度的方法
Aug 08 Python
PyTorch和Keras计算模型参数的例子
Jan 02 Python
编译 pycaffe时报错:fatal error: numpy/arrayobject.h没有那个文件或目录
Nov 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 cache类代码(php数据缓存类)
2010/04/15 PHP
php下用cookie统计用户访问网页次数的代码
2010/05/09 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
PHP的反射机制实例详解
2017/03/29 PHP
详解PHP如何更好的利用PHPstorm的自动提示
2017/08/18 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
一些不错的js函数ajax
2008/08/20 Javascript
js 格式化时间日期函数小结
2010/03/20 Javascript
js 设置选中行的样式的实现代码
2010/05/24 Javascript
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
jquery动态加载select下拉框示例代码
2013/12/10 Javascript
JS刷新当前页面的几种方法总结
2013/12/24 Javascript
JS实现仿中关村论坛评分后弹出提示效果的方法
2015/02/23 Javascript
JS原型链怎么理解
2016/06/27 Javascript
javascript中sort排序实例详解
2016/07/24 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
JQuery获取鼠标进入和离开容器的方向
2016/12/29 Javascript
AngularJS中$injector、$rootScope和$scope的概念和关联关系深入分析
2017/01/19 Javascript
微信小程序中实现一对多发消息详解及实例代码
2017/02/14 Javascript
js正则表达式验证密码强度【推荐】
2017/03/03 Javascript
mockjs,json-server一起搭建前端通用的数据模拟框架教程
2017/12/18 Javascript
angular4中*ngFor不能对返回来的对象进行循环的解决方法
2018/09/12 Javascript
[52:00]2018DOTA2亚洲邀请赛 4.1 小组赛 A组加赛 LGD vs Optic
2018/04/02 DOTA
Python3爬虫中pyspider的安装步骤
2020/07/29 Python
Jupyter安装链接aconda实现过程图解
2020/11/02 Python
使用CSS3制作一个简单的Chrome模拟器
2015/07/15 HTML / CSS
浅谈CSS3 动画卡顿解决方案
2019/01/02 HTML / CSS
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
露营世界:Camping World
2017/02/02 全球购物
群众路线教育实践活动方案
2014/02/02 职场文书
土建工程师岗位职责
2014/06/10 职场文书
2015年新农村建设工作总结
2015/05/22 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书
85句关于理想的名言警句大全
2019/08/22 职场文书
html实现弹窗的实例
2021/06/09 HTML / CSS
Windows server 2003卸载和安装IIS的图文教程
2022/07/15 Servers