flask 实现上传图片并缩放作为头像的例子


Posted in Python onJanuary 09, 2020

个人开发的 flask 论坛进入尾声,还剩最后一个上传图片更换头像功能,搞了一整天,最后终于解决了所有问题,现在记录下解决方案。

1. 上传文件

分析一下更换头像功能,我们需要做哪些事,简单的思路是:上传文件,获取文件的 url 。

文件上传的基本原理实际上很简单,基本上是:

一个带有 enctype=multipart/form-data 的 <form> 标记,标记中含有 一个 <input type=file>。

应用通过请求对象的 files 字典来访问文件。

使用文件的 save() 方法把文件永久 地保存在文件系统中。

于是可以得到我们的提供上传按钮的表单页面:

{% extends "base.html" %}
{% import "bootstrap/wtf.html" as wtf %}

{% block title %}SYSUfm - 更换头像{% endblock %}

{% block page_content %}
<div class="page-header">
  <h1>更换你的头像</h1>
</div>
<div class="col-md-4">
  <form action="" method=post enctype=multipart/form-data>
    <input type=file name=file><br/>
    <input type=submit value=Upload>
  </form>
</div>

{% endblock %}

2. 创建略缩图

接下来我们需要有路由到这个页面的视图函数,服务器后台端的代码如下:

@main.route('/edit-avatar', methods=['GET', 'POST'])
@login_required
def change_avatar():
  if request.method == 'POST':
    file = request.files['file']
    size = (40, 40)
    im = Image.open(file)
    im.thumbnail(size)
    if file and allowed_file(file.filename):
      filename = secure_filename(file.filename)
      im.save(os.path.join(main.static_folder, 'avatar', filename))
      current_user.new_avatar_file = url_for('main.static', filename='%s/%s' % ('avatar', filename))
      current_user.is_avatar_default = False
      flash(u'头像修改成功')
      return redirect(url_for('.user', username=current_user.username))
  return render_template('change_avatar.html')

这里 main 是一个 blueprint,file = request.files['file'] 语句获得图片文件对象,将其转换为 Image 对象,通过 thumbnail 方法进行略缩。

最后 im.save(os.path.join(main.static_folder, 'avatar', filename)) 语句将略缩图片保存到服务指定路径。

以上这篇flask 实现上传图片并缩放作为头像的例子就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python聊天程序实例代码分享
Nov 18 Python
详解duck typing鸭子类型程序设计与Python的实现示例
Jun 03 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
Oct 26 Python
Python Pandas数据中对时间的操作
Jul 30 Python
python3.6编写的单元测试示例
Aug 17 Python
python获取Linux发行版名称
Aug 30 Python
Python使用__new__()方法为对象分配内存及返回对象的引用示例
Sep 20 Python
django实现支付宝支付实例讲解
Oct 17 Python
python动态文本进度条的实例代码
Jan 22 Python
Python使用enumerate获取迭代元素下标
Feb 03 Python
PyCharm2020.1.1与Python3.7.7的安装教程图文详解
Aug 07 Python
详解在OpenCV中如何使用图像像素
Mar 03 Python
python中如何使用insert函数
Jan 09 #Python
Python Pillow.Image 图像保存和参数选择方式
Jan 09 #Python
python 解决flask 图片在线浏览或者直接下载的问题
Jan 09 #Python
Django密码存储策略分析
Jan 09 #Python
python 实现Flask中返回图片流给前端展示
Jan 09 #Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
Jan 09 #Python
python将图片转base64,实现前端显示
Jan 09 #Python
You might like
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
php慢查询日志和错误日志使用详解
2021/02/27 PHP
IE浏览器PNG图片透明效果代码
2008/09/02 Javascript
js导出table到excel同时兼容FF和IE示例
2013/09/03 Javascript
Javascript中的异步编程规范Promises/A详细介绍
2014/06/06 Javascript
再探JavaScript作用域
2014/09/24 Javascript
jQuery中prop()方法用法实例
2015/01/05 Javascript
基于JS实现类似支付宝支付密码输入框
2016/09/02 Javascript
树结构之JavaScript
2017/01/24 Javascript
jQuery实现拼图小游戏(实例讲解)
2017/07/24 jQuery
JavaScript实现微信红包算法及问题解决方法
2018/04/26 Javascript
javascript实现弹出层效果
2019/12/10 Javascript
Vue中使用better-scroll实现轮播图组件
2020/03/07 Javascript
[01:11]回顾历届DOTA2国际邀请赛中国区预选赛
2017/06/26 DOTA
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
[01:01:24]LGD vs Fnatic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
[08:08]DOTA2-DPC中国联赛2月28日Recap集锦
2021/03/11 DOTA
[50:44]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第二场 2月22日
2021/03/11 DOTA
基于Python如何使用AIML搭建聊天机器人
2016/01/27 Python
Python字符串处理实例详解
2017/05/18 Python
Django 重写用户模型的实现
2019/07/29 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
python3正则模块re的使用方法详解
2020/02/11 Python
基于HTML5 FileSystem API的使用介绍
2013/04/24 HTML / CSS
使用HTML5里的classList操作CSS类
2016/06/28 HTML / CSS
HTML5 video进入全屏和退出全屏的实现方法
2020/07/28 HTML / CSS
发现世界上最好的珠宝设计师:JewelStreet
2017/12/17 全球购物
美国体育用品商店:Rally House(NCAA、NFL、MLB、NBA、NHL和MLS)
2018/01/03 全球购物
Ariat官网:美国马靴和服装品牌
2019/12/16 全球购物
运动会解说词50字
2014/01/18 职场文书
签约仪式主持词
2014/03/19 职场文书
公司股东合作协议书
2014/09/14 职场文书
银行开户授权委托书格式
2014/10/10 职场文书
社区党员干部承诺书
2015/05/04 职场文书
超级礼物观后感
2015/06/15 职场文书
python实现局部图像放大
2021/11/17 Python