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之从if开始语句的征程
Sep 14 Python
详解Python程序与服务器连接的WSGI接口
Apr 29 Python
CentOS中使用virtualenv搭建python3环境
Jun 08 Python
对Python的Django框架中的项目进行单元测试的方法
Apr 11 Python
Python简单计算数组元素平均值的方法示例
Dec 26 Python
Python中xrange与yield的用法实例分析
Dec 26 Python
把pandas转换int型为str型的方法
Jan 29 Python
python3.6实现学生信息管理系统
Feb 21 Python
[机器视觉]使用python自动识别验证码详解
May 16 Python
python爬虫爬取笔趣网小说网站过程图解
Nov 18 Python
Python调用百度OCR实现图片文字识别的示例代码
Jul 17 Python
Python编写万花尺图案实例
Jan 03 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
第4章 数据处理-php正则表达式-郑阿奇(续)
2011/07/04 PHP
PHP获得数组交集与差集的方法
2015/06/10 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
javascript 常用方法总结
2009/06/03 Javascript
TextArea 控件的最大长度问题(js json)
2009/12/16 Javascript
form表单只提交数据而不进行页面跳转的解决方案
2013/09/18 Javascript
JSON无限折叠菜单编写实例
2013/12/16 Javascript
jquery插件开发之实现jquery手风琴功能分享
2014/03/10 Javascript
关闭浏览器窗口弹出提示框并且可以控制其失效
2014/04/15 Javascript
JavaScript中对象property的删除方法介绍
2014/12/30 Javascript
JavaScript生成随机数的4种自定义函数分享
2015/02/28 Javascript
jQuery插件实现控制网页元素动态居中显示
2015/03/24 Javascript
jQuery UI插件实现百度提词器效果
2016/11/21 Javascript
利用iscroll4实现轮播图效果实例代码
2017/01/11 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
jQuery中库的引用方法
2018/01/06 jQuery
JS与jQuery判断文本框还剩多少字符可以输入的方法
2018/09/01 jQuery
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
nest.js 使用express需要提供多个静态目录的操作方法
2019/10/24 Javascript
Vue列表如何实现滚动到指定位置样式改变效果
2020/05/09 Javascript
javascript实现电商放大镜效果
2020/11/23 Javascript
Python实现处理管道的方法
2015/06/04 Python
Django 添加静态文件的两种实现方法(必看篇)
2017/07/14 Python
python的多重继承的理解
2017/08/06 Python
python 生成器协程运算实例
2017/09/04 Python
python 求某条线上特定x值或y值的点坐标方法
2019/07/09 Python
python中多个装饰器的调用顺序详解
2019/07/16 Python
解决python多线程报错:AttributeError: Can't pickle local object问题
2020/04/08 Python
css3 position fixed固定居中问题解决方案
2014/08/19 HTML / CSS
使用CSS3实现多列布局与多背景的技巧
2016/02/29 HTML / CSS
HTML5 input元素类型:email及url介绍
2013/08/13 HTML / CSS
PHP两种查询函数array/row的区别
2013/06/03 面试题
酒店总经理欢迎词
2014/01/08 职场文书
生产文员岗位职责
2014/04/05 职场文书
乒乓球兴趣小组活动总结
2014/07/08 职场文书
2016元旦晚会主持词
2015/07/01 职场文书