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 open()文件处理使用介绍
Nov 30 Python
python并发编程之多进程、多线程、异步和协程详解
Oct 28 Python
python实现unicode转中文及转换默认编码的方法
Apr 29 Python
Django 过滤器汇总及自定义过滤器使用详解
Jul 19 Python
python3.7 的新特性详解
Jul 25 Python
Python中logging日志库实例详解
Feb 19 Python
python numpy生成等差数列、等比数列的实例
Feb 25 Python
jupyter notebook 实现matplotlib图动态刷新
Apr 22 Python
Keras—embedding嵌入层的用法详解
Jun 10 Python
踩坑:pytorch中eval模式下结果远差于train模式介绍
Jun 23 Python
python删除指定列或多列单个或多个内容实例
Jun 28 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
Feb 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
php守护进程 加linux命令nohup实现任务每秒执行一次
2011/07/04 PHP
教你如何快捷的使用cmd访问mysql小技巧
2014/05/26 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
2014/08/16 PHP
ThinkPHP开发--使用七牛云储存
2017/09/14 PHP
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
js indexOf()定义和用法
2012/10/21 Javascript
jquery批量控制form禁用的代码
2013/08/06 Javascript
Javascript弹出窗口的各种方法总结
2013/11/11 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
jQuery内容过滤选择器用法示例
2016/09/09 Javascript
ES5学习教程之Array对象
2017/04/01 Javascript
ionic2打包android时gradle无法下载的解决方法
2017/04/05 Javascript
Bootstrap Table使用整理(五)之分页组合查询
2017/06/09 Javascript
Node.js  REPL (交互式解释器)实例详解
2017/08/06 Javascript
从源码看angular/material2 中 dialog模块的实现方法
2017/10/18 Javascript
JS基于对象的特性实现去除数组中重复项功能详解
2017/11/17 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
Angular实现的进度条功能示例
2018/02/18 Javascript
解决vue 按钮多次点击重复提交数据问题
2018/05/10 Javascript
解决vue js IOS H5focus无法自动弹出键盘的问题
2018/08/30 Javascript
对numpy和pandas中数组的合并和拆分详解
2018/04/11 Python
Pycharm远程调试原理及具体配置详解
2019/08/08 Python
Django CBV与FBV原理及实例详解
2019/08/12 Python
Python使用gluon/mxnet模块实现的mnist手写数字识别功能完整示例
2019/12/18 Python
PyCharm 无法 import pandas 程序卡住的解决方式
2020/03/09 Python
如何Tkinter模块编写Python图形界面
2020/10/14 Python
实例讲解HTML5的meta标签的一些应用
2015/12/08 HTML / CSS
销售自荐信
2013/10/22 职场文书
追悼会子女答谢词
2014/01/28 职场文书
规划编制实施方案
2014/03/15 职场文书
涉密人员保密承诺书
2014/05/28 职场文书
置业顾问岗位职责
2015/02/09 职场文书
九年级英语教学反思
2016/02/15 职场文书
JS Object构造函数之Object.freeze
2021/04/28 Javascript