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 相关文章推荐
linux安装python修改默认python版本方法
Mar 31 Python
Python异常处理例题整理
Jul 07 Python
python破解bilibili滑动验证码登录功能
Sep 11 Python
python Manager 之dict KeyError问题的解决
Dec 21 Python
使用tensorboard可视化loss和acc的实例
Jan 21 Python
python GUI库图形界面开发之PyQt5美化窗体与控件(异形窗体)实例
Feb 25 Python
django正续或者倒序查库实例
May 19 Python
numpy中生成随机数的几种常用函数(小结)
Aug 18 Python
Python+OpenCV图像处理—— 色彩空间转换
Oct 22 Python
python中time.ctime()实例用法
Feb 03 Python
python基于tkinter制作无损音乐下载工具
Mar 29 Python
Tensorflow与RNN、双向LSTM等的踩坑记录及解决
May 31 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实现xml转换数组的方法示例
2017/02/03 PHP
PHP实现对数组分页处理实例详解
2017/02/07 PHP
PHP批量删除jQuery操作
2017/07/23 PHP
PHP数据库编程之MySQL优化策略概述
2017/08/16 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
jquery固定底网站底部菜单效果
2013/08/13 Javascript
js的.innerHTML = ""IE9下显示有错误的解决方法
2013/09/16 Javascript
谈谈encodeURI和encodeURIComponent以及escape的区别与应用
2015/11/24 Javascript
jquery 判断selection range 是否在容器中的简单实例
2016/08/02 Javascript
JavaScript制作颜色反转小游戏
2016/09/25 Javascript
JS实现动态增加和删除li标签行的实例代码
2016/10/16 Javascript
Bootstrap缩略图与警告框学习使用
2017/02/08 Javascript
你真的了解BOM中的history对象吗
2017/02/13 Javascript
详解Vuejs2.0 如何利用proxyTable实现跨域请求
2017/08/03 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
vue 动态添加class,三个以上的条件做判断方式
2020/11/02 Javascript
[06:13]DOTA2进化论(修改版)
2013/10/08 DOTA
Python3.x和Python2.x的区别介绍
2013/02/12 Python
python标准算法实现数组全排列的方法
2015/03/17 Python
python取数作为临时极大值(极小值)的方法
2018/10/15 Python
python获取交互式ssh shell的方法
2019/02/14 Python
python移位运算的实现
2019/07/15 Python
完美解决Django2.0中models下的ForeignKey()问题
2020/05/19 Python
用python进行视频剪辑
2020/11/02 Python
Python爬虫新手入门之初学lxml库
2020/12/20 Python
大专毕业生自我评价分享
2013/11/10 职场文书
乡镇干部先进事迹材料
2014/02/03 职场文书
班长自荐书范文
2014/02/11 职场文书
松材线虫病防治方案
2014/06/15 职场文书
2014年秋季开学典礼主持词
2014/08/02 职场文书
乡镇务虚会发言材料
2014/10/20 职场文书
英文感谢信格式
2015/01/21 职场文书
学生会招新宣传语
2015/07/13 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
Mysql文件存储图文详解
2021/06/01 MySQL
Pytorch中expand()的使用(扩展某个维度)
2022/07/15 Python