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中字符串格式化str.format的详细介绍
Feb 17 Python
Python初学者需要注意的事项小结(python2与python3)
Sep 26 Python
python去掉 unicode 字符串前面的u方法
Oct 21 Python
opencv python统计及绘制直方图的方法
Jan 21 Python
Python使用crontab模块设置和清除定时任务操作详解
Apr 09 Python
pytorch神经网络之卷积层与全连接层参数的设置方法
Aug 18 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
Python实现随机生成任意数量车牌号
Jan 21 Python
Linux安装Python3如何和系统自带的Python2并存
Jul 23 Python
详解pandas apply 并行处理的几种方法
Feb 24 Python
Python中glob库实现文件名的匹配
Jun 18 Python
python读取mnist数据集方法案例详解
Sep 04 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
yii2.0数据库迁移教程【多个数据库同时同步数据】
2016/10/08 PHP
php json中文编码为null的解决办法
2016/12/14 PHP
JavaScript 类似flash效果的立体图片浏览器
2010/02/08 Javascript
js实时监听文本框状态的方法
2011/04/26 Javascript
JS实现的省份级联实例代码
2013/06/24 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
H5手机端多文件上传预览插件
2017/04/21 Javascript
Bootstrap进度条与AJAX后端数据传递结合使用实例详解
2017/04/23 Javascript
AngularJS使用ng-class动态增减class样式的方法示例
2017/05/18 Javascript
详解用webpack2搭建angular2的项目
2017/06/22 Javascript
vue-cli脚手架-bulid下的配置文件
2018/03/27 Javascript
详解js加减乘除精确计算
2019/03/19 Javascript
泛谈JS逻辑判断选择器 || &&
2019/05/24 Javascript
vuejs中父子组件之间通信方法实例详解
2020/01/17 Javascript
vue项目中企业微信使用js-sdk时config和agentConfig配置方式详解
2020/12/15 Vue.js
Vue单页面应用中实现Markdown渲染
2021/02/14 Vue.js
浅谈用Python实现一个大数据搜索引擎
2017/11/28 Python
python实现可逆简单的加密算法
2019/03/22 Python
flask框架配置mysql数据库操作详解
2019/11/29 Python
python3 tcp的粘包现象和解决办法解析
2019/12/09 Python
Python Flask框架实现简单加法工具过程解析
2020/06/03 Python
Python3爬虫关于识别检验滑动验证码的实例
2020/07/30 Python
可能这些是你想要的H5软键盘兼容方案(小结)
2019/04/23 HTML / CSS
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
zooplus意大利:在线宠物商店
2019/08/07 全球购物
客户表扬信范文
2014/01/10 职场文书
《和我们一样享受春天》教学反思
2014/02/07 职场文书
人民教师求职自荐信
2014/03/12 职场文书
体育教师求职信
2014/05/24 职场文书
优秀教研组申报材料
2014/12/26 职场文书
大学生党员个人总结
2015/02/13 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
三严三实·严以修身心得体会
2016/01/15 职场文书
会议主持词通用版
2019/04/02 职场文书
创业计划书之美甲店
2019/09/20 职场文书