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 break语句详解
Mar 11 Python
python实现的简单抽奖系统实例
May 22 Python
详解Python的Django框架中Manager方法的使用
Jul 21 Python
举例讲解Python设计模式编程中的访问者与观察者模式
Jan 26 Python
详解Python核心对象类型字符串
Feb 11 Python
TensorFlow利用saver保存和提取参数的实例
Jul 26 Python
PyCharm使用Docker镜像搭建Python开发环境
Dec 26 Python
python文件读取失败怎么处理
Jun 23 Python
完美解决Pycharm中matplotlib画图中文乱码问题
Jan 11 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 01 Python
Python实战之用tkinter库做一个鼠标模拟点击器
Apr 27 Python
PyQt5爬取12306车票信息程序的实现
May 14 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
Eclipse的PHP插件PHPEclipse安装和使用
2014/07/20 PHP
php使用Jpgraph绘制复杂X-Y坐标图的方法
2015/06/10 PHP
深入讲解PHP的Yii框架中的属性(Property)
2016/03/18 PHP
PHP实现的堆排序算法详解
2017/08/17 PHP
php实现银联商务公众号+服务窗支付的示例代码
2019/10/12 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
2020/01/23 PHP
从零开始学习jQuery (十) jQueryUI常用功能实战
2011/02/23 Javascript
javaScript如何生成xmlhttp
2013/12/16 Javascript
使用js检测浏览器是否支持html5中的video标签的方法
2014/03/12 Javascript
Javascript基础知识(一)核心基础语法与事件模型
2014/09/29 Javascript
全面解析Bootstrap排版使用方法(文字样式)
2015/11/30 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
原生的强大DOM选择器querySelector介绍
2016/12/21 Javascript
js手机号批量滚动抽奖实现代码
2020/04/17 Javascript
js实现文字选中分享功能
2017/01/25 Javascript
vue.js利用Object.defineProperty实现双向绑定
2017/03/09 Javascript
inner join 内联与left join 左联的实例代码
2017/09/18 Javascript
静态页面实现 include 引入公用代码的示例
2017/09/25 Javascript
vue中使用refs定位dom出现undefined的解决方法
2017/12/21 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
vue.js响应式原理解析与实现
2020/06/22 Javascript
vue用BMap百度地图实现即时搜索功能
2019/09/26 Javascript
JavaScript复制变量三种方法实例详解
2020/01/09 Javascript
python获取远程图片大小和尺寸的方法
2015/03/26 Python
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
Python程序控制语句用法实例分析
2020/01/14 Python
thinkphp5 路由分发原理
2021/03/18 PHP
CSS3实现自定义Checkbox特效实例代码
2017/04/24 HTML / CSS
毕业生怎样写好自荐信
2013/11/11 职场文书
秋天的图画教学反思
2014/05/01 职场文书
机械电子工程专业求职信
2014/06/22 职场文书
村级个人对照检查材料
2014/08/22 职场文书
大学生第一学年自我鉴定
2014/09/12 职场文书
化工生产实习心得体会
2016/01/22 职场文书
css3实现的加载动画效果
2021/04/07 HTML / CSS
探究Mysql模糊查询是否区分大小写
2021/06/11 MySQL