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中__call__方法示例分析
Oct 11 Python
python使用wxPython打开并播放wav文件的方法
Apr 24 Python
在Python中处理时间之clock()方法的使用
May 22 Python
Python实现Sqlite将字段当做索引进行查询的方法
Jul 21 Python
对numpy中数组元素的统一赋值实例
Apr 04 Python
mac下pycharm设置python版本的图文教程
Jun 13 Python
tensorflow实现图像的裁剪和填充方法
Jul 27 Python
python 实现识别图片上的数字
Jul 30 Python
python3 requests库文件上传与下载实现详解
Aug 22 Python
详解Python self 参数
Aug 30 Python
Pycharm导入anaconda环境的教程图解
Jul 31 Python
python环境搭建和pycharm的安装配置及汉化详细教程(零基础小白版)
Aug 19 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获取网络文件的实现代码
2010/01/01 PHP
php设计模式 Mediator (中介者模式)
2011/06/26 PHP
PHP用PDO如何封装简单易用的DB类详解
2017/07/30 PHP
Laravel框架用户登陆身份验证实现方法详解
2017/09/14 PHP
ThinkPHP框架实现的邮箱激活功能示例
2018/06/15 PHP
php array 转json及java 转换 json数据格式操作示例
2019/11/13 PHP
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
jQuery中after的两种用法实例
2013/07/03 Javascript
详细分析JavaScript变量类型
2015/07/08 Javascript
JS组件Bootstrap Select2使用方法详解
2020/04/17 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
2016/03/18 Javascript
JS构造函数与原型prototype的区别介绍
2016/07/04 Javascript
Node.js批量给图片加水印的方法
2016/11/15 Javascript
javascript解析ajax返回的xml和json格式数据实例详解
2017/01/05 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
Vue使用localStorage存储数据的方法
2019/05/27 Javascript
vue 中几种传值方法(3种)
2019/11/12 Javascript
[08:47]DOTA2每周TOP10 精彩击杀集锦vol.6
2014/06/25 DOTA
Python中规范定义命名空间的一些建议
2016/06/04 Python
Python的时间模块datetime详解
2017/04/17 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
numpy基础教程之np.linalg
2019/02/12 Python
Python Opencv任意形状目标检测并绘制框图
2019/07/23 Python
Python运行异常管理解决方案
2020/03/09 Python
Python无损压缩图片的示例代码
2020/08/06 Python
pycharm永久激活超详细教程
2020/10/29 Python
python 用pandas实现数据透视表功能
2020/12/21 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
Champion官网:美国冠军运动服装
2017/01/25 全球购物
科颜氏香港官方网店:Kiehl’s香港
2021/03/07 全球购物
学生个人的自我评价分享
2013/11/05 职场文书
小学运动会表扬稿
2014/01/19 职场文书
甜品蛋糕店创业计划书
2014/09/21 职场文书
2014年信息技术工作总结
2014/12/16 职场文书
2015年纪检监察工作总结
2015/04/08 职场文书
幼儿园园长六一致辞
2015/07/31 职场文书