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+POP3实现批量下载邮件附件
Jun 19 Python
python发送告警邮件脚本
Sep 17 Python
使用python telnetlib批量备份交换机配置的方法
Jul 25 Python
Python交互式图形编程的实现
Jul 25 Python
pandas的排序和排名的具体使用
Jul 31 Python
python opencv将表格图片按照表格框线分割和识别
Oct 30 Python
pytorch绘制并显示loss曲线和acc曲线,LeNet5识别图像准确率
Jan 02 Python
python游戏开发的五个案例分享
Mar 09 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
Apr 21 Python
在Ubuntu 20.04中安装Pycharm 2020.1的图文教程
Apr 30 Python
使用Keras画神经网络准确性图教程
Jun 15 Python
Django框架中模型的用法
Jun 10 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
360通用php防护代码(使用操作详解)
2013/06/18 PHP
一个简单的PHP验证码实现代码
2014/05/10 PHP
php中用memcached实现页面防刷新功能
2014/08/19 PHP
PHP动态编译出现Cannot find autoconf的解决方法
2014/11/05 PHP
laravel 框架实现无限级分类的方法示例
2019/10/31 PHP
表单内同名元素的控制
2006/11/22 Javascript
javascript的函数
2007/01/31 Javascript
js 与或运算符 || && 妙用
2009/12/09 Javascript
JavaScript高级程序设计 阅读笔记(四) ECMAScript中的类型转换
2012/02/27 Javascript
javascript的字符串按引用复制和传递,按值来比较介绍与应用
2012/12/28 Javascript
JS关键字球状旋转效果的实例代码
2013/11/29 Javascript
js 高效去除数组重复元素示例代码
2013/12/19 Javascript
浅谈DOCTYPE对$(window).height()取值的影响
2016/07/21 Javascript
vue.js表格分页示例
2016/10/18 Javascript
详解axios在vue中的简单配置与使用
2017/05/10 Javascript
layui框架table 数据表格的方法级渲染详解
2018/08/19 Javascript
浅谈vux之x-input使用以及源码解读
2018/11/04 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
原理深度解析Vue的响应式更新比React快
2020/04/04 Javascript
[02:41]DOTA2英雄基础教程 亚巴顿
2014/01/02 DOTA
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
python中的闭包用法实例详解
2015/05/05 Python
flask-socketio实现WebSocket的方法
2018/07/31 Python
Python中pyecharts安装及安装失败的解决方法
2020/02/18 Python
Python 字符串处理特殊空格\xc2\xa0\t\n Non-breaking space
2020/02/23 Python
python else语句在循环中的运用详解
2020/07/06 Python
PyCharm Community安装与配置的详细教程
2020/11/24 Python
马来西亚最大的在线隐形眼镜商店:MrLens
2019/03/27 全球购物
NHL官方在线商店:Shop.NHL.com
2020/05/01 全球购物
汽车专业求职信
2014/06/05 职场文书
服装设计专业自荐信
2014/06/17 职场文书
2014年工作总结及2015工作计划
2014/12/12 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
用Python编写简单的gRPC服务的详细过程
2021/07/04 Python
Spring Boot 使用 Spring-Retry 进行重试框架
2022/04/24 Java/Android