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中json格式数据输出的简单实现方法
Oct 31 Python
Python数据结构之翻转链表
Feb 25 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
Jul 06 Python
Python实现的弹球小游戏示例
Aug 01 Python
Python利用multiprocessing实现最简单的分布式作业调度系统实例
Nov 14 Python
selenium在执行phantomjs的API并获取执行结果的方法
Dec 17 Python
Python调用百度根据经纬度查询地址的示例代码
Jul 07 Python
python获取Pandas列名的几种方法
Aug 07 Python
基于matplotlib xticks用法详解
Apr 16 Python
如何实现在jupyter notebook中播放视频(不停地展示图片)
Apr 23 Python
安装python3.7编译器后如何正确安装opnecv的方法详解
Jun 16 Python
matplotlib设置颜色、标记、线条,让你的图像更加丰富(推荐)
Sep 25 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
不用mod_rewrite直接用php实现伪静态化页面代码
2008/10/04 PHP
新手菜鸟必读:session与cookie的区别
2013/08/22 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
点击下载链接 弹出页面实现代码
2009/10/01 Javascript
防止动态加载JavaScript引起的内存泄漏问题
2009/10/08 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
JS使用ajax从xml文件动态获取数据显示的方法
2015/03/24 Javascript
js正则表达式匹配数字字母下划线等
2015/04/14 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
微信小程序 开发经验整理
2017/02/15 Javascript
JavaScript无缝滚动效果的实例代码
2017/03/27 Javascript
JS实现中文汉字按拼音排序的方法
2017/10/09 Javascript
使用3D引擎threeJS实现星空粒子移动效果
2020/09/13 Javascript
vue + element-ui的分页问题实现
2018/12/17 Javascript
vue中多个倒计时实现代码实例
2019/03/27 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
Vue中component标签解决项目组件化操作
2020/09/04 Javascript
原生js实现自定义滚动条组件
2021/01/20 Javascript
[02:10]探秘浦东源深体育馆 DOTA2 Supermajor不见不散
2018/05/17 DOTA
Python中的exec、eval使用实例
2014/09/23 Python
Python的Django框架中settings文件的部署建议
2015/05/30 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
Python虚拟环境项目实例
2017/11/20 Python
python 反向输出字符串的方法
2018/07/16 Python
python paramiko利用sftp上传目录到远程的实例
2019/01/03 Python
HTML5注册表单的自动聚焦与占位文本示例代码
2013/07/19 HTML / CSS
跑步、骑行和铁人三项的高性能眼镜和服装:ROKA
2018/07/06 全球购物
学生就业推荐信
2013/11/13 职场文书
社团活动总结报告
2014/06/27 职场文书
教育合作协议范本
2014/10/17 职场文书
婚前保证书范文
2015/02/28 职场文书
自荐信模板大全
2015/03/27 职场文书
中职班主任培训心得体会
2016/01/07 职场文书