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中使用bidict模块双向字典结构的奇技淫巧
Jul 12 Python
Python urls.py的三种配置写法实例详解
Apr 28 Python
Python中实现最小二乘法思路及实现代码
Jan 04 Python
Windows下python3.6.4安装教程
Jul 31 Python
对python dataframe逻辑取值的方法详解
Jan 30 Python
python dlib人脸识别代码实例
Apr 04 Python
Windows系统Python直接调用C++ DLL的方法
Aug 01 Python
python 队列基本定义与使用方法【初始化、赋值、判断等】
Oct 24 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
Feb 29 Python
Django 实现对已存在的model进行更改
Mar 28 Python
在keras下实现多个模型的融合方式
May 23 Python
python爬取某网站原图作为壁纸
Jun 02 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
经典的星际争霸,满是回忆的BGM
2020/04/09 星际争霸
再说下636单管机
2021/03/02 无线电
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
2014/11/20 PHP
PHP集成百度Ueditor 1.4.3
2014/11/23 PHP
jQuery向下滚动即时加载内容实现的瀑布流效果
2016/01/07 PHP
PHP实现驼峰样式字符串(首字母大写)转换成下划线样式字符串的方法示例
2017/08/10 PHP
PHP基于双向链表与排序操作实现的会员排名功能示例
2017/12/26 PHP
PHP后台备份MySQL数据库的源码实例
2019/03/18 PHP
纯JavaScript实现的完美渐变弹出层效果代码
2010/04/02 Javascript
转义字符(\)对JavaScript中JSON.parse的影响概述
2013/07/17 Javascript
js的image onload事件使用遇到的问题
2014/07/15 Javascript
jQuery消息提示框插件Tipso
2015/05/04 Javascript
jQuery插件实现静态HTML验证码校验
2015/11/06 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
2015/11/19 Javascript
网页挂马方式整理及详细介绍
2016/11/03 Javascript
Vue.js框架路由使用方法实例详解
2017/08/25 Javascript
基于vue 添加axios组件,解决post传参数为null的问题
2018/03/05 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
JS实现秒杀倒计时特效
2020/01/02 Javascript
python实现博客文章爬虫示例
2014/02/26 Python
win10环境下python3.5安装步骤图文教程
2017/02/03 Python
Python获取当前函数名称方法实例分享
2018/01/18 Python
python互斥锁、加锁、同步机制、异步通信知识总结
2018/02/11 Python
远程部署工具Fabric详解(支持Python3)
2019/07/04 Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
2020/07/30 Python
使用before和:after伪类制作css3圆形按钮
2014/04/08 HTML / CSS
canvas绘制圆角头像的实现方法
2019/01/17 HTML / CSS
服装机修工岗位职责
2013/12/26 职场文书
征婚广告词
2014/03/17 职场文书
合作经营协议书
2014/04/17 职场文书
体育系毕业生自荐信
2014/06/28 职场文书
党员一帮一活动总结
2014/07/08 职场文书
学院党的群众路线教育实践活动整改方案
2014/10/04 职场文书
试用期工作表现自我评价
2015/03/06 职场文书
在python中实现导入一个需要传参的模块
2021/05/12 Python
Python批量解压&压缩文件夹的示例代码
2022/04/04 Python