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 环境变量和import模块导入方法(详解)
Jul 11 Python
Python爬取十篇新闻统计TF-IDF
Jan 03 Python
Python3.6.2调用ffmpeg的方法
Jan 10 Python
说说如何遍历Python列表的方法示例
Feb 11 Python
python Django里CSRF 对应策略详解
Aug 05 Python
python3的数据类型及数据类型转换实例详解
Aug 20 Python
python中如何使用insert函数
Jan 09 Python
Python程序控制语句用法实例分析
Jan 14 Python
Tensorflow: 从checkpoint文件中读取tensor方式
Feb 10 Python
python如何导入依赖包
Jul 13 Python
Django一小时写出账号密码管理系统
Apr 29 Python
整理Python中常用的conda命令操作
Jun 15 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
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
Linux fgetcsv取得的数组元素为空字符串的解决方法
2011/11/25 PHP
解析argc argv在php中的应用
2013/06/24 PHP
PHP图片裁剪函数(保持图像不变形)
2014/05/04 PHP
可以文本显示的公告栏的js代码
2007/03/11 Javascript
一个简单的js动画效果代码
2010/07/20 Javascript
Iframe自适应高度绝对好使的代码 兼容IE,遨游,火狐
2011/01/27 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
JQuery对表单元素的基本操作使用总结
2014/07/18 Javascript
实例讲解JavaScript的Backbone.js框架中的View视图
2016/05/05 Javascript
两种js监听滚轮事件的实现方法
2016/05/13 Javascript
javascript 数组的定义和数组的长度
2016/06/07 Javascript
从零学习node.js之文件操作(三)
2017/02/21 Javascript
使用bootstraptable插件实现表格记录的查询、分页、排序操作
2017/08/06 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
2017/10/18 Javascript
Vue添加请求拦截器及vue-resource 拦截器使用
2017/11/23 Javascript
JavaScript基于对象方法实现数组去重及排序操作示例
2018/07/10 Javascript
vue自定义指令用法经典实例小结
2019/03/16 Javascript
ES6学习笔记之字符串、数组、对象、函数新增知识点实例分析
2020/01/22 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
2020/06/08 Javascript
Python计算程序运行时间的方法
2014/12/13 Python
python实现Decorator模式实例代码
2018/02/09 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
Python基于内置库pytesseract实现图片验证码识别功能
2020/02/24 Python
浅谈Python爬虫原理与数据抓取
2020/07/21 Python
python自动化办公操作PPT的实现
2021/02/05 Python
DAWGS鞋官方网站:鞋,凉鞋,靴子
2016/10/04 全球购物
Casetify官网:自制专属手机壳、iPad护壳和Apple Watch手表带
2018/05/09 全球购物
英国PC组件和在线电脑商店:SCAN
2019/04/18 全球购物
办公文员的工作岗位职责
2013/11/12 职场文书
函授教育个人学习的自我评价
2013/12/31 职场文书
四年级数学教学反思
2014/02/02 职场文书
品质主管岗位职责
2014/03/16 职场文书
返乡农民工证明
2015/06/24 职场文书
2019年预备党员的思想汇报:加深对党的认知
2019/09/25 职场文书
nginx 添加http_stub_status_module模块
2022/05/25 Servers