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求算数平方根和约数的方法汇总
Mar 09 Python
Python判断列表是否已排序的各种方法及其性能分析
Jun 20 Python
python之文件的读写和文件目录以及文件夹的操作实现代码
Aug 28 Python
python 开发的三种运行模式详细介绍
Jan 18 Python
python中map的基本用法示例
Sep 10 Python
Python OpenCV读取png图像转成jpg图像存储的方法
Oct 28 Python
python 获取图片分辨率的方法
Jan 08 Python
基于Python的Post请求数据爬取的方法详解
Jun 14 Python
python selenium爬取斗鱼所有直播房间信息过程详解
Aug 09 Python
Python类的绑定方法和非绑定方法实例解析
Mar 04 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 Python
Python实现简单的俄罗斯方块游戏
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
第七节 类的静态成员 [7]
2006/10/09 PHP
简单的PHP留言本实例代码
2010/05/09 PHP
php中定时计划任务的实现原理
2013/01/08 PHP
PHP实现简单ajax Loading加载功能示例
2016/12/28 PHP
php常用字符函数实例小结
2016/12/29 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
2019/11/25 PHP
DOM 脚本编程中的兄弟节点
2009/10/31 Javascript
javascript算法题 求任意一个1-9位不重复的N位数在该组合中的大小排列序号
2012/07/21 Javascript
事件冒泡是什么如何用jquery阻止事件冒泡
2013/03/20 Javascript
jquery教程ajax请求json数据示例
2014/01/13 Javascript
鼠标悬停小图标显示大图标
2016/01/22 Javascript
javascript每日必学之封装
2016/02/23 Javascript
微信小程序动态添加分享数据
2017/06/14 Javascript
JavaScript判断日期时间差的实例代码
2018/03/01 Javascript
Vue 项目代理设置的优化
2018/04/17 Javascript
JS重学系列之聊聊new操作符
2019/03/04 Javascript
使用Three.js实现太阳系八大行星的自转公转示例代码
2019/04/09 Javascript
Windows下安装 node 的版本控制工具 nvm
2020/02/06 Javascript
详解钉钉小程序组件之自定义模态框(弹窗封装实现)
2020/03/07 Javascript
使用JavaScript实现贪吃蛇游戏
2020/09/29 Javascript
vant 时间选择器--开始时间和结束时间实例
2020/11/04 Javascript
[57:55]完美世界DOTA2联赛PWL S3 Magma vs Phoenix 第二场 12.12
2020/12/16 DOTA
Python列表计数及插入实例
2014/12/17 Python
Python使用random和tertools模块解一些经典概率问题
2015/01/28 Python
Django 生成登陆验证码代码分享
2017/12/12 Python
Python实现批量读取图片并存入mongodb数据库的方法示例
2018/04/02 Python
Python生成短uuid的方法实例详解
2018/05/29 Python
pycharm中使用anaconda部署python环境的方法步骤
2018/12/19 Python
HTML5 CSS3打造相册效果附源码下载
2014/06/16 HTML / CSS
精彩自我鉴定
2014/01/16 职场文书
感恩之星事迹材料
2014/05/03 职场文书
2014年科普工作总结
2014/12/06 职场文书
监察建议书
2015/02/04 职场文书
新生儿未入户证明
2015/06/23 职场文书
Python爬虫之自动爬取某车之家各车销售数据
2021/06/02 Python