<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
python版本:3.6+
需要模組:flask,pillow
需求:開發一個支援多格式圖片上傳的介面,並且將圖片壓縮,支援線上預覽圖片。
目錄結構:
app.py編輯內容:
from flask import Flask, request, Response, render_template from werkzeug.utils import secure_filename import os import uuid from PIL import Image, ExifTags app = Flask(__name__) # 範例Flask應用 # 設定允許上傳的檔案格式 ALLOW_EXTENSIONS = ['png', 'jpg', 'jpeg'] # 設定圖片儲存資料夾 app.config['UPLOAD_FOLDER'] = './static/image/' # 設定圖片返回的域名字首 image_url = "http://127.0.0.1:8002/image/" # 設定圖片壓縮尺寸 image_c = 1000 # 跨域支援 def after_request(resp): resp.headers['Access-Control-Allow-Origin'] = '*' return resp app.after_request(after_request) # 判斷檔案字尾是否在列表中 def allowed_file(filename): return '.' in filename and filename.rsplit('.', 1)[-1] in ALLOW_EXTENSIONS # 首頁 @app.route('/') def hello_world(): return render_template('index.html') # 心跳檢測 @app.route("/check", methods=["GET"]) def check(): return 'Im live' # 圖片獲取地址 用於存放靜態檔案 @app.route("/image/<imageId>") def get_frame(imageId): # 圖片上傳儲存的路徑 try: with open(r'./static/image/{}'.format(imageId), 'rb') as f: image = f.read() result = Response(image, mimetype="image/jpg") return result except BaseException as e: return {"code": '503', "data": str(e), "message": "圖片不存在"} # 上傳圖片 @app.route("/upload_image", methods=['POST', "GET"]) def uploads(): if request.method == 'POST': # 獲取檔案 file = request.files['file'] # 檢測檔案格式 if file and allowed_file(file.filename): # secure_filename方法會去掉檔名中的中文,獲取檔案的字尾名 file_name_hz = secure_filename(file.filename).split('.')[-1] # 使用uuid生成唯一圖片名 first_name = str(uuid.uuid4()) # 將 uuid和字尾拼接為 完整的檔名 file_name = first_name + '.' + file_name_hz # 儲存原圖 file.save(os.path.join(app.config['UPLOAD_FOLDER'], file_name)) # 以下是壓縮圖片的過程,在原圖的基礎上 file_min = Image.open(file) # exif讀取原始方位資訊 防止圖片壓縮後發生旋轉 try: for orientation in ExifTags.TAGS.keys(): if ExifTags.TAGS[orientation] == 'Orientation': break exif = dict(file_min._getexif().items()) if exif[orientation] == 3: file_min = file_min.rotate(180, expand=True) elif exif[orientation] == 6: file_min = file_min.rotate(270, expand=True) elif exif[orientation] == 8: file_min = file_min.rotate(90, expand=True) except: pass # 獲取原圖尺寸 w, h = file_min.size # 計算壓縮比 bili = int(w / image_c) # 按比例對寬高壓縮 file_min.thumbnail((w // bili, h // bili)) # 生成縮圖的完整檔名 file_name_min = first_name + '_min.' + file_name_hz # 儲存縮圖 file_min.save(os.path.join(app.config['UPLOAD_FOLDER'], file_name_min)) # 返回原本和縮圖的 完整瀏覽連結 return {"code": '200', "image_url": image_url + file_name, "image_url_min": image_url + file_name_min, "message": "上傳成功"} else: return "格式錯誤,僅支援jpg、png、jpeg格式檔案" return {"code": '503', "data": "", "message": "僅支援post方法"} if __name__ == "__main__": app.run(host="0.0.0.0", port=8002, debug=True) # 專案入口
執行app.py
使用postman對介面進行測試:
返回結果:
從瀏覽器開啟檢視:
我們開啟資料夾檢檢視片:
可以看出,壓縮後的圖片和原圖的大小。
完工!(註釋的很詳細,就不想打字了)
到此這篇關於使用python flask框架開發圖片上傳介面的案例詳解的文章就介紹到這了,更多相關python flask框架開發圖片上傳介面內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45