flask 實(shí)現(xiàn)上傳圖片并縮放作為頭像的例子
個(gè)人開(kāi)發(fā)的 flask 論壇進(jìn)入尾聲,還剩最后一個(gè)上傳圖片更換頭像功能,搞了一整天,最后終于解決了所有問(wèn)題,現(xiàn)在記錄下解決方案。
1. 上傳文件
分析一下更換頭像功能,我們需要做哪些事,簡(jiǎn)單的思路是:上傳文件,獲取文件的 url 。
文件上傳的基本原理實(shí)際上很簡(jiǎn)單,基本上是:
一個(gè)帶有 enctype=multipart/form-data 的 <form> 標(biāo)記,標(biāo)記中含有 一個(gè) <input type=file>。
應(yīng)用通過(guò)請(qǐng)求對(duì)象的 files 字典來(lái)訪問(wèn)文件。
使用文件的 save() 方法把文件永久 地保存在文件系統(tǒng)中。
于是可以得到我們的提供上傳按鈕的表單頁(yè)面:
{% 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. 創(chuàng)建略縮圖
接下來(lái)我們需要有路由到這個(gè)頁(yè)面的視圖函數(shù),服務(wù)器后臺(tái)端的代碼如下:
@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 是一個(gè) blueprint,file = request.files['file'] 語(yǔ)句獲得圖片文件對(duì)象,將其轉(zhuǎn)換為 Image 對(duì)象,通過(guò) thumbnail 方法進(jìn)行略縮。
最后 im.save(os.path.join(main.static_folder, 'avatar', filename)) 語(yǔ)句將略縮圖片保存到服務(wù)指定路徑。
以上這篇flask 實(shí)現(xiàn)上傳圖片并縮放作為頭像的例子就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
淺談sklearn中predict與predict_proba區(qū)別
這篇文章主要介紹了淺談sklearn中predict與predict_proba區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06
python使用selenium爬蟲(chóng)知乎的方法示例
這篇文章主要介紹了python使用selenium爬蟲(chóng)知乎的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
Django多數(shù)據(jù)庫(kù)聯(lián)用實(shí)現(xiàn)方法解析
這篇文章主要介紹了Django多數(shù)據(jù)庫(kù)聯(lián)用實(shí)現(xiàn)方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11
python?類(lèi)型轉(zhuǎn)換函數(shù)示例詳解
這篇文章主要介紹了python?類(lèi)型轉(zhuǎn)換函數(shù)示例詳解,通過(guò)float()將一個(gè)字符串或數(shù)字轉(zhuǎn)換為浮點(diǎn)數(shù),本文結(jié)合示例代碼給大家介紹的非常詳細(xì),感興趣的朋友跟隨小編一起看看吧2024-05-05
關(guān)于WARNING:Ignoring?invalid?distribution?-pencv-python....
這篇文章主要給大家介紹了關(guān)于WARNING:Ignoring?invalid?distribution?-pencv-python....警告信息的處理方法,文中通過(guò)圖文將解決的辦法介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-03-03

