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发送arp欺骗攻击代码分析
Jan 16 Python
Windows8下安装Python的BeautifulSoup
Jan 22 Python
Python简单实现子网掩码转换的方法
Apr 13 Python
python 获取list特定元素下标的实例讲解
Apr 09 Python
对Python 网络设备巡检脚本的实例讲解
Apr 22 Python
Python排序算法之选择排序定义与用法示例
Apr 29 Python
基于windows下pip安装python模块时报错总结
Jun 12 Python
python可视化实现代码
Jan 15 Python
Python批量删除只保留最近几天table的代码实例
Apr 01 Python
pandas DataFrame创建方法的方式
Aug 02 Python
python安装和pycharm环境搭建设置方法
May 27 Python
如何使用Python自动生成报表并以邮件发送
Oct 15 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垃圾回收机制对内存泄露的处理
2013/06/14 PHP
php另类上传图片的方法(PHP用Socket上传图片)
2013/10/30 PHP
PHP缓存集成库phpFastCache用法
2014/12/15 PHP
YII2框架中查询生成器Query()的使用方法示例
2020/03/18 PHP
javascript获取元素偏移量的方法有哪些
2014/06/24 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
2014 年最热门的21款JavaScript框架推荐
2014/12/25 Javascript
JavaScript使用replace函数替换字符串的方法
2015/04/06 Javascript
JS实现弹出居中的模式窗口示例
2016/06/20 Javascript
Bootstrap的class样式小结
2016/12/01 Javascript
谈谈Vue.js——vue-resource全攻略
2017/01/16 Javascript
JavaScript简单验证表单空值及邮箱格式的方法
2017/01/20 Javascript
详解Vue.js基于$.ajax获取数据并与组件的data绑定
2017/05/26 Javascript
详解angularjs中的隔离作用域理解以及绑定策略
2017/05/31 Javascript
Textarea输入字数限制实例(兼容iOS&amp;安卓)
2017/07/06 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
VsCode新建VueJs项目的详细步骤
2017/09/23 Javascript
vue组件与复用详解
2018/04/08 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
[02:38]DOTA2亚洲邀请赛 IG战队巡礼
2015/02/03 DOTA
[00:52]DOTA2第二届亚洲邀请赛预选赛宣传片
2017/01/13 DOTA
Python对列表排序的方法实例分析
2015/05/16 Python
在Python中用keys()方法返回字典键的教程
2015/05/21 Python
python snownlp情感分析简易demo(分享)
2017/06/04 Python
Pandas 同元素多列去重的实例
2018/07/03 Python
Python实现将多个空格换为一个空格.md的方法
2018/12/20 Python
Win10下python 2.7与python 3.7双环境安装教程图解
2019/10/12 Python
python 协程 gevent原理与用法分析
2019/11/22 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
Python如何发送与接收大型数组
2020/08/07 Python
新西兰最大的连锁超市:Countdown
2020/06/04 全球购物
DOM和JQuery对象有什么区别
2016/11/11 面试题
运动会1000米加油稿
2015/07/21 职场文书
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python
让JavaScript代码更加精简的方法技巧
2022/06/01 Javascript